Asigna cada palabra a la cadena de sus letras ordenadas. Llamemos a esta cadena ordenada la palabra “firma”. Ejemplos:
verde azulado => aelt
cuento => aelt
tarde => aelt
destino => a la izquierda
Ahora, si invierte el mapa, obtendrá todas las palabras con una “firma” dada. Por lo tanto, una firma de “aelt” corresponde a las palabras “teal”, “tale”, “late”, etc. No hay muchas palabras en el diccionario de inglés, por lo que almacenar todo este mapeo en la memoria solo tomaría unos pocos megabytes de RAM
- ¿Hay libros / tutoriales para algoritmos y estructuras de datos que sean más amigables y para principiantes?
- Cómo eliminar duplicados en un vector C ++ y también si solo quiero elementos duplicados
- ¿Cómo funciona la revisión gramatical en Microsoft Word?
- ¿Cuál es una buena explicación de la asignación de Dirichlet latente?
- ¿Cuán específicamente la memoria de la clase de almacenamiento cambiará las arquitecturas, los ecosistemas (incluidas las opciones de lenguaje de programación) y los algoritmos para big data?
Cuando alguien solicita anagramas de una palabra, puede calcular la firma de la palabra y luego devolver todas las palabras con esa firma. Si desea devolver palabras más cortas, puede eliminar 1 o más caracteres de la firma y devolver todas las palabras con la nueva firma. Por ejemplo, si elimina “a” de la firma “aelt”, obtendrá la firma “elt”, que corresponde a “let” y tal vez algunas otras palabras.
Una palabra de n caracteres tiene una firma de n caracteres, y esa firma tendrá 2 ^ n-2 posibles sub-firmas **. Si n = 7, hay a lo sumo 126 búsquedas de anagramas para las firmas secundarias.
Si desea obtener anagramas que se pueden crear si agrega una letra a su palabra, entonces hay 26 letras que puede agregar a la firma, y simplemente puede buscar todas las palabras para las 26 firmas resultantes.
Básicamente, para una palabra de 7 letras, podrá encontrar todos los anagramas de la palabra, todos los anagramas que se pueden crear a partir de una subcadena de la palabra y todos los anagramas que se pueden crear al agregar una sola letra a la palabra , en un máximo de 1 + 126 + 26 = ~ 153 búsquedas de mapas. Luego, toma todos los resultados, los combina en una sola colección y listo.
** Cada uno de los n caracteres en la firma se puede incluir o excluir de las sub-firmas, por lo que son 2 ^ n combinaciones. Queremos excluir la firma secundaria vacía (todos los caracteres excluidos) y la firma original (todos los caracteres incluidos), por lo que es 2 ^ n-2. Finalmente, este es un límite superior, ya que una palabra con letras repetidas habrá generado sub-firmas duplicadas (es decir, para “todos”, puede generar “al” de la primera y segunda letra o de la primera y tercera letra)