Алгоритм 'k' 'числа, що найчастіше зустрічаються


19

Я шукав найефективніший (потоковий ??) алгоритм, який підказує мені "k" найчастіше зустрічаються елементи в потоці даних в будь-який момент часу. Ця публікація: Алгоритми потоку даних "Розділити та перемогти" зацікавила мене.

Наприклад, припустимо, що є числа: (4,3,5,1,6,2,4,3,3,8,9,1), і я запитую 3 найчастіше зустрічаються числа (скажімо), тоді я повинен отримайте (3,4,1) як відповідь.

Я спробував шукати в Інтернеті, але не зміг знайти жодного місця, яке б підходило і каже, що це найкраще. Тривіальним рішенням буде використання купи або збалансованого бінарного дерева, але я думаю, що є кращий спосіб, і я хотів знати, чи це десь задокументовано.

Редагувати: Я шукаю алгоритм, який завжди дає правильну відповідь, на відміну від алгоритму апроміксації (багато з яких спливає в результатах пошуку), який покладається на розподіл даних тим чи іншим чином


Насправді існує три види алгоритмів: точний, приблизний та "залежний від даних". Ви виключили останній вид, але чи є приблизні алгоритми, які НЕ залежать від допустимого розподілу даних? як я вказав, якщо ні, то у вас виникають проблеми через відомі нижчі межі цієї проблеми в налаштуваннях потоку.
Суреш Венкат

1
Мені було цікаво, чи алгоритми, які використовують обмежену пам’ять (потокові алгоритми), можуть насправді робити те, що я хотів, і здається, що вони не можуть, як ви вказали. Також, чи відомий точний алгоритм без потокового потоку, який вирішує проблему в O (n) гарантований найгірший час, про який згадувалося тут (цитується у статті Cormode та Hadjileftheriou за посиланням, яке ви надали): citeseerx.ist.psu. edu / viewdoc / резюме? doi = 10.1.1.106.7889
dhruvbird

Відповіді:


20

k=1o(n)

n/k

kk


1
+1. Я думаю, що> 50% алгоритму часу - це добре відомий (алгоритм більшості елементів), як ви згадували
dhruvbird

2
Спасибі!! Документ Кормода та Хаджілефтеріо, про який ви згадували, цитує цей документ: citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.106.7889, який має ту саму методику, про яку я думав. Він веде 2 пов'язані списки; один за частотою, а всередині нього інший список усіх елементів з однаковою частотою.
dhruvbird

Ви можете детальніше розглянути алгоритм, що перевищує 50 відсотків? а головоломка Google? Я не можу дотримуватися цього неохайного міркування, оскільки ви тільки що торкнулися його і не повністю витратили на "добре відомий трюк". Спасибі.


Це коментар (недостатня репутація) на посилання Suresh Venkat userweb.cs.utexas.edu/users/misra/scannedPdf.dir/… : Схоже, алгоритм, представлений там, вимагає повторного проходження даних, що заборонено тут. Насправді я не бачу, як може існувати однопрохідний алгоритм з вимогами простору O (1).
TonyK

2

Я також рекомендую ознайомитись з розділом 8.1.3 "Видобуток частотних зразків у потоках даних" наступної книги:

Jiawei Han, Мішелін Камбер. Обмін даними --- поняття та методики, друге видання, видавництво Morgan Kaufmann , 2006.

Він вводить алгоритм, відомий як Підрахунок втрат , який наближає часті елементи (елементи, підтримка яких перевищує деяку min_support ) з довільною точністю.

Не зовсім те, що ви хочете, але я подумав, що це може допомогти.


можливо, ви можете мені допомогти в моєму запитанні тут
Бен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.