Probablemente lo haría comenzando con un diccionario, luego (para cada palabra) inserte la palabra en una lista marcada por los números que podrían formar la palabra.
Entonces, es probable que necesite para ordenar las listas resultantes de alguna manera, por lo que es más probable palabras aparecen antes que las palabras menos probable (si usted tiene el espacio, también me incluir un área pequeña para un contador, por lo que puede reordenar incrementalmente estos O simplemente mover el último usado al principio de la lista de sugerencias, para que, con el tiempo, tiendamos a darle al usuario una mejor respuesta).
esta manera, cuando usted tiene 4663 como una entrada, puede simplemente recuperar la lista relevante ingenio ligado HÅ más o menos O (1) tabla hash de búsqueda.
+1 por mencionar Trie. – Jack
¿Podría detallar un poco la solución de tablas hash anidadas?No entiendo por qué una tabla hash anidada es mejor que una tabla hash simple en toda la palabra (usando, por ejemplo, un [multimap] (http://www.sgi.com/tech/stl/Multimap.html)) que todavía sería O (3^n) caso promedio. – Wernight
+1 para Trie, que para mí es una solución aceptable y elegante. – eeerahul