Je cherchais l'algorithme le plus efficace (streaming ??) qui me dise les «k» éléments les plus fréquemment rencontrés dans un flux de données à tout moment. Cet article: Les algorithmes de flux de données "Diviser et conquérir" m'ont intéressé.
Par exemple, supposons qu'il y ait des nombres: (4,3,5,1,6,2,4,3,3,8,9,1) et que je recherche les 3 nombres les plus fréquents (disons), alors je devrais prenez (3,4,1) comme réponse.
J'ai essayé de chercher en ligne, mais je n'ai pas trouvé d'endroit qui donne une approche et dit que c'est le meilleur. Une solution triviale serait d'utiliser un tas ou un arbre binaire équilibré, mais je pense qu'il existe une meilleure façon et je voulais savoir si elle est documentée quelque part.
Edit: je recherche un algorithme qui donne toujours la bonne réponse par opposition à un algorithme d'appromixation (dont beaucoup apparaissent dans les résultats de recherche) qui repose sur la distribution des données d'une manière ou d'une autre