Probabilmente lo farei iniziando con un dizionario, quindi (per ogni parola) spingere la parola in una lista digitata dai numeri che potrebbero formare la parola.
Quindi, probabilmente dovrai ordinare gli elenchi risultanti in qualche modo, quindi le parole più probabili vengono visualizzate prima delle parole meno probabili (se hai lo spazio, includerei anche una piccola area per un contatore, quindi può riordinare in modo incrementale questi OR semplicemente spostando l'ultimo usato nella parte anteriore dell'elenco di suggerimenti, quindi, nel tempo, tendiamo a dare all'utente una risposta migliore).
In questo modo, quando si dispone di 4663 come input, è possibile semplicemente recuperare l'elenco collegato rilevante con circa O (1) ricerca tabella hash.
+1 per menzionare Trie. – Jack
Potresti descrivere un po 'la soluzione di tabelle hash nidificate?Non capisco perché una tabella hash annidata sia migliore di una semplice tabella hash sull'intera parola (usando ad esempio un [multimap] (http://www.sgi.com/tech/stl/Multimap.html) che sarebbe ancora O (3^n) caso medio. – Wernight
+1 per Trie, che per me è una soluzione accettabile ed elegante. – eeerahul