Le moyen le plus efficace de stocker des milliers de numéros de téléphone

C'est un google les questions de l'entrevue:

Il y a environ mille numéros de téléphone stockés ayant chacun des 10 chiffres. Vous pouvez prendre les 5 premiers chiffres de chaque être même à travers des milliers de numéros. Vous devez effectuer les opérations suivantes:
un. Recherche si un nombre donné existe.
b. Imprimer tout le nombre

Ce qui est le plus efficace d'économiser de l'espace façon de le faire ?

J'ai répondu à la table de hachage et, plus tard, le codage de huffman mais mon interviewer dit que je n'allait pas dans la bonne direction. Merci de m'aider ici.

Pourrait à l'aide d'un suffixe trie aider?

Idéalement 1000 numéros de stocker prend 4 octets par numéro dans tout ce qu'il faudrait 4000 octets pour stocker 1000 nombre. Quantitativement, je souhaite à réduire le stockage de < 4000 octets, c'est ce que mon interviewer m'a expliqué.

  • Je répondrais que l'utilisation normale de la base de données, vous pouvez les stocker sous forme de texte, voire des milliers/millions de dollars, et les opérations de recherche va encore être très rapide. Je vous déconseille de faire "intelligents" les choses depuis l'ensemble du système devra être refait si ils veulent à l'avenir pour soutenir les numéros internationaux, ou si les numéros de téléphone qui commencent par un "0" commencent à apparaître, ou si le gouvernement décide de modifier le numéro de téléphone de format, et ainsi de suite.
  • Je serais probablement donner cette réponse, à moins que j'ai été interviewer une compagnie comme Google ou Facebook, ont été hors de la boîte solutions il suffit de ne pas le couper. Bien que postgres, par exemple, a tente, trop, je ne voudrais pas être sûr que ces couper le débit de données de google a besoin de prendre de.
  • gardez à l'esprit que l'OP spécifiquement indiqué que "près d'un millier de numéros"
  • Vrai, aurait également été un test, que la personne sait interpréter de telles contraintes correctement et choisir la meilleure solution en fonction de cela.
  • "efficace" dans cette question doit vraiment être définies efficace dans lequel les moyens? l'espace, le temps, les deux?
  • La Trie mentionné dans les réponses est très similaire à ce que nous avons en fait utilisé pour les numéros de téléphone sur un téléphone commutateur. Il est très efficace quand vous avez un plan de numérotation où les préfixes sont réellement affectés dans les groupes - comme la façon dont la physique utilisation des lignes téléphoniques d'être attribués. Mais avec le numéro de téléphone de la portabilité, je suis sûr qu'ils ont des différents algorithmes.
  • vous pouvez envisager de bitset<17> structure de données pour le stockage efficace de 5 chiffres au lieu d'un entier de sorte que vous permettra d'économiser au moins 15 bits pour chaque numéro, c'est presque la moitié de l'espace nécessaire