Резюме Мисры – Гриса - Misra–Gries summary

В области алгоритмы потоковой передачи, Резюме Мисра – Грис используются для решения проблема с частыми элементами в модель потока данных. То есть, учитывая длинный поток ввода, который может быть исследован только один раз (и в некотором произвольном порядке), алгоритм Мисра-Гриса может использоваться для вычисления, какое (если оно есть) значение составляет большую часть потока или, в более общем смысле, , набор элементов, составляющих фиксированную часть потока.

Резюме Мисры – Гриса

Как и для всех алгоритмов в модели потока данных, входом является конечный последовательность из целые числа из конечной области. Алгоритм выдает ассоциативный массив который имеет значения из потока в качестве ключей и оценки их частоты в качестве соответствующих значений. Требуется параметр k который определяет размер массива, который влияет как на качество оценок, так и на объем используемой памяти.

алгоритм misra-gries:[1]    Вход:         Положительное целое число k        Конечная последовательность s принимает значения в диапазоне 1,2, ...,м    выход: Ассоциативный массив А с оценками частоты для каждого элемента в s        А : = новый (пустой) ассоциативный массив пока s не пусто: брать ценность я из s        если я находится в ключах (А):            А[я] := А[i] +1 иначе если | ключи (А)| < k - 1:            А[я] := 1        еще:            для каждого K в ключах (А):                А[K] := А[K] - 1                если А[K] = 0: удалить K от ключей (А)    возвращаться А

Характеристики

Алгоритм Мисры – Гриса использует O (k(бревно(м) + журнал (п))) Космос, куда м - количество различных значений в потоке и п - длина потока.

Каждый элемент, который встречается как минимум п/k раз гарантированно появится в выходном массиве.[1] Следовательно, при втором проходе по данным точные частоты для k−1 элемент может быть вычислен для решения проблемы частых элементов, или в случае k= 2, проблема большинства. Этот второй проход занимает O (kбревно(м)) Космос.[нужна цитата ]

Резюме (массивы), выводимые алгоритмом: сливаемый, в том смысле, что объединение сводок двух потоков s и р добавляя их массивы по ключам, а затем уменьшая каждый счетчик в результирующем массиве до тех пор, пока k остается результат в виде сводки того же (или лучшего) качества по сравнению с запуском алгоритма Misra-Gries по конкатенация из s с р.

Пример

Пусть k = 2 и поток данных 1,4,5,4,4,5,4,4 (n = 8, m = 5). Обратите внимание, что 4 появляется 5 раз в потоке данных, что больше, чем n / k = 4 раза, и, следовательно, должно появиться на выходе алгоритма.

Поскольку k = 2 и | keys (A) | = k − 1 = 1, алгоритм может иметь только один ключ с соответствующим ему значением. Затем алгоритм будет выполняться следующим образом (- означает, что ключ отсутствует):

Пример выполнения Мисры – Гриса
Потоковая ценностьКлючЦенить
111
40
551
40
441
50
441
442

Выход: 4

Рекомендации

  • Misra, J .; Грис, Дэвид (1982). «Поиск повторяющихся элементов». Наука компьютерного программирования. 2 (2): 143–152. Дои:10.1016/0167-6423(82)90012-0. HDL:1813/6345.
  • Кормод, Грэм (2014). «Сводки Мисра-Гриса». Ин Као, Мин-Ян (ред.). Энциклопедия алгоритмов. Springer США. С. 1–5. Дои:10.1007/978-3-642-27848-8_572-1. ISBN  9783642278488.

внешняя ссылка