Los problemas de búsqueda de palabras clásicamente pueden resolverse eficientemente usando un Trie.
Yo sugeriría encontrar una lista de palabras, por ejemplo, de WordNet, almacenarlo en un trie, y luego realizar rápidas búsquedas de palabras posibles.
Una solución sería de la forma:
- carga la lista de palabras
- tienda de la lista de palabras en un trie
- aceptar la entrada de una palabra para descifrar
tratar permutaciones i = 1..N
a. búsqueda de permutación i usando el trie
b. si hay un resultado positivo, guárdelo para visualizar
c. iterate (i ++)
repetición de 3.
edición:
Una nota aquí es que para cualquier palabra de caracteres de longitud N que podría ser N! búsquedas requeridas (para 7 caracteres que serían 5040). Debería considerar realizar algunas optimizaciones para el algoritmo de búsqueda trie. Por ejemplo, obtienes una eficiencia sustancial al descartar las subcadenas no válidas antes de tiempo y no repetir las permutaciones finales.
p. Ej. dada la palabra manzana, si tuviera la permutación en la que seleccionó "ppl" como los primeros tres caracteres, no se encontrará ninguna palabra. Entonces, no importa cómo permutes la a y la e al final no puedes construir una palabra.La terminación temprana de las permutaciones puede ser importante para la eficacia de su algoritmo.
¿Sabe usted que en PHP, cualquier matriz asociativa es en realidad un diccionario? – amn