Algorithme pour trouver le top 10 des termes de recherche

Je suis actuellement en train de préparer pour une entrevue, et cela me rappelle une question que m'a demandé une fois dans une précédente interview qui disait quelque chose comme:

"Il vous a été demandé de concevoir un logiciel pour afficher en permanence le top 10 des termes de recherche sur Google. Vous avez accès à une alimentation qui fournit une interminable de flux en temps réel des termes de recherche actuellement en cours de recherche sur Google. Décrire ce que l'algorithme et structures de données vous pouvez utiliser pour mettre en œuvre cette. Vous êtes à la conception de deux variantes:

(i) Afficher les 10 premiers termes de recherche de tous les temps (c'est à dire depuis que vous avez commencé la lecture de l'alimentation).

(ii) d'Afficher uniquement le top 10 des termes de recherche pour le mois passé, mis à jour toutes les heures.

Vous pouvez utiliser une approximation pour obtenir la liste du top 10, mais vous devez justifier votre choix."

J'ai bombardé dans cette interview et encore ont vraiment aucune idée de comment le mettre en œuvre.

La demande, en premier lieu pour les 10 les plus fréquentes des éléments dans un développement continu de la sous-séquence d'une liste infinie. J'ai regardé dans les algorithmes de sélection, mais ne pouvais pas trouver toutes les versions en ligne pour résoudre ce problème.

La seconde partie utilise une liste restreinte, mais en raison de la grande quantité de données en cours de traitement, vous ne pouvez pas vraiment de magasin sur l'ensemble du mois de termes de recherche dans la mémoire et de calculer un histogramme de chaque heure.

Le problème est rendu plus difficile par le fait que le top 10 liste est continuellement mise à jour, donc, en quelque sorte, vous devez être le calcul de votre top 10 sur une fenêtre glissante.

Des idées?

  • Ce n'est pas une stupide question de l'entrevue, c'est une mauvaise interprétation sur l'OP de la partie. Ce n'est pas pour vous demander le plus fréquent des éléments dans une liste infinie, il est demandé pour les plus fréquentes des éléments finis sous-suite d'une liste infinie. Pour continuer votre analogie, what is the most frequent item in the subsequence [2; 2; 3; 3; 3; 4; 4; 4; 4; 5; 5] of your sequence?
  • C'est certainement une question difficile, mais je ne vois pas pourquoi il est stupide, il semble que représentant d'un assez typique de problème que les entreprises avec d'énormes ensembles de données sont confrontés. @IVlad - Fixe à votre suggestion, une mauvaise formulation de ma part!
InformationsquelleAutor del | 2010-07-15