Как считать события с помощью метода "Разделяй и властвуй"

Я ищу алгоритм для подсчета количества вхождений каждого элемента в массиве, используя метод Divide and Conquer.

Вот пример;

Input: 12-3-5-3-12-3
OutPut: (12, 2), (3, 3), (5,1)

Может кто-нибудь хотя бы дать мне представление, с чего начать? Спасибо

1 ответ

Вы можете объединить отсортировать массив и затем вывести значения с их количеством в один проход отсортированного массива.

В качестве альтернативы, вы также можете сопоставить ваш входной массив с массивом пар: (number, 1), Затем разделите и захватите, как при сортировке слиянием, но на этапе слияния вы увеличиваете количество одинаковых чисел, а не выводите его несколько раз.

Пример кода на питоне

#!python

input = [12, 3, 5, 3, 12, 3];

def count_occurrences(input):
    """ Divide """
    if(len(input) == 0):
        return []
    if(len(input) == 1):
        return [(input[0], 1)]
    left   = count_occurrences(input[:len(input)/2])
    right  = count_occurrences(input[len(input)/2:])

    """ Conquer """
    result = []
    i=0
    j=0
    imax=len(left)
    jmax=len(right)
    while(i<imax and j<jmax):
        if(left[i][0] < right[j][0]):
            result.append(left[i])
            i = i+1
        elif(left[i][0] > right[j][0]):
            result.append(right[j])
            j = j+1
        else:
            result.append((left[i][0], left[i][1]+right[j][1]))
            i = i+1
            j = j+1
    while(i<imax):
        result.append(left[i])
        i = i+1;
    while(j<jmax):
        result.append(right[j])
        j = j+1;

    return result


print (count_occurrences(input))

Это напечатает:

$ python how-to-count-occurrences-with-divide-and-conquer-method.py
[(3, 3), (5, 1), (12, 2)]                                                       
Другие вопросы по тегам