Szukałem najbardziej wydajnego algorytmu (streaming?), Który mówi mi „k” najczęściej występujące elementy w strumieniu danych w dowolnym momencie. Ten post: Algorytmy strumienia danych „Dziel i rządź” zainteresowały mnie.
Załóżmy na przykład, że istnieją liczby: (4,3,5,1,6,2,4,3,3,8,8,9,1) i szukam 3 najczęściej występujących liczb (powiedzmy), to powinienem otrzymaj (3,4,1) jako odpowiedź.
Próbowałem szukać w Internecie, ale nie mogłem znaleźć żadnego miejsca, które dałoby takie podejście i powiedziałoby, że to najlepsze. Trywialnym rozwiązaniem byłoby użycie sterty lub zbalansowanego drzewa binarnego, ale myślę, że jest lepszy sposób i chciałem wiedzieć, czy gdzieś jest to udokumentowane.
Edycja: szukam algorytmu, który zawsze daje poprawną odpowiedź, w przeciwieństwie do algorytmu appromiksacji (wiele z nich pojawia się w wynikach wyszukiwania), które opierają się na dystrybucji danych w taki czy inny sposób
źródło
Odpowiedzi:
źródło
Polecam również przeczytanie sekcji 8.1.3 „Częste wyszukiwanie wzorców w strumieniach danych” następującej książki:
Jiawei Han, Micheline Kamber. Data Mining --- Concepts and Techniques, drugie wydanie, Morgan Kaufmann Publishers , 2006.
Wprowadza algorytm znany jako Lossy Counting , który aproksymuje częste przedmioty (przedmioty, których wsparcie jest powyżej niektórych min_support ) z dowolną precyzją.
Nie dokładnie to, czego chcesz, ale pomyślałem, że to może pomóc.
źródło