Ho cercato l'algoritmo più efficiente (streaming ??) che mi dice gli elementi "k" che si verificano più frequentemente in un flusso di dati in qualsiasi momento. Questo post: gli algoritmi del flusso di dati "Dividi e conquista" mi hanno interessato.
Ad esempio, supponiamo che ci siano numeri: (4,3,5,1,6,2,4,3,3,8,9,1) e io chiedo i 3 numeri che si verificano più frequentemente (diciamo), quindi dovrei ottieni (3,4,1) come risposta.
Ho provato a cercare online, ma non sono riuscito a trovare un posto che dia un approccio e dica che è il migliore. Una soluzione banale sarebbe quella di usare un heap o un albero binario bilanciato, ma penso che ci sia un modo migliore e volevo sapere se è documentato da qualche parte.
Modifica: sto cercando un algoritmo che dia sempre la risposta corretta rispetto a un algoritmo di appromix (molti dei quali compaiono nei risultati di ricerca) che si basano sulla distribuzione dei dati in un modo o nell'altro