Eu tenho procurado pelo algoritmo (streaming ??) mais eficiente que me diz os 'k' elementos que ocorrem com mais frequência em um fluxo de dados a qualquer momento. Este post: "Divida e conquiste" algoritmos de fluxo de dados me interessaram.
Por exemplo, suponha que haja números: (4,3,5,1,6,2,4,3,3,8,9,1) e eu pesquise os 3 números que ocorrem com mais frequência (digamos), então devo get (3,4,1) como resposta.
Tentei pesquisar on-line, mas não consegui encontrar nenhum lugar que dê uma abordagem e diga que esse é o melhor. Uma solução trivial seria usar uma pilha ou uma árvore binária equilibrada, mas acho que há uma maneira melhor e eu queria saber se está documentada em algum lugar.
Editar: estou procurando um algoritmo que sempre dê a resposta correta em oposição a um algoritmo de aprovação (muitos dos quais aparecem nos resultados de pesquisa) que dependem da distribuição de dados de uma maneira ou de outra
fonte
Respostas:
Há uma extensa literatura sobre esse problema. Em primeiro lugar, mesmo para , o problema é difícil: como Alon, Matias e Szegedy mostram, você não pode obter uma aproximação fatorial melhor que a constante do elemento mais popular no espaço, mesmo que você está disposto a ser randomizado.o ( n )k = 1 o ( n )
No entanto, se você tiver certeza de que um elemento ocorre estritamente mais de 50% do tempo, existe um truque simples que usa espaço constante e o encontra (essa é uma pergunta popular do Google Puzzle). De maneira mais geral, é possível encontrar elementos que ocorrem mais de vezes usando uma generalização desse truque.n / k
Uma pesquisa definitiva sobre o que se sabe sobre o problema é o artigo de Cormode e Hadjileftheriou da VLDB 2008 . Abrange os métodos acima e muitos dos métodos mais recentes. a ideia geral é que você possa gerar uma lista aproximada dos principais itens de (onde aproximado aqui significa que você pode obter itens cujas contagens estão próximas das contagens dos principais itens de ).kk k
fonte
Também recomendo a leitura da seção 8.1.3 "Mineração de padrões freqüentes em fluxos de dados" do livro a seguir:
Jiawei Han, Micheline Kamber. Data Mining --- Conceitos e Técnicas, Segunda Edição, Morgan Kaufmann Publishers , 2006.
Ele apresenta um algoritmo, conhecido como contagem com perdas , que aproxima itens frequentes (itens cujo suporte está acima de algum suporte mínimo ) com precisão arbitrária.
Não é exatamente o que você quer, mas achei que poderia ajudar.
fonte