Dado un conjunto de cadenas, devuelva todos los grupos de cadenas que son anagramas.Dado un conjunto de cadenas, devuelva todos los grupos de cadenas que son anagramas
Mis soluciones:
Para cada palabra cadena de la matriz, una especie que O (m lg m), m es la longitud media de una palabra.
Crear un hash Tabla < cadena, lista>.
Poner la palabra ordenada en la tabla hash como clave y también generar todas las permutaciones (O (m!)) De la palabra, buscar cada permutación en un diccionario (un mapa de árbol de prefijos) con O (m), si está en el diccionario, colóquelo (O (1)) en la tabla hash para que todas las palabras permutadas se incluyan en la lista con la misma clave.
Totalmente, O (n * m * lg m * m!) Tiempo y O (n * m!) Espacio, n es el tamaño de la matriz dada.
Si m es muy grande, no es eficiente, m! .
¿Alguna mejor solución?
gracias
También deberíamos considerar el costo de construir el alfabeto O (sizeof (dictionary) * k). En su solución, O (nk) es para la matriz de cadenas dada, no para el diccionario. gracias – user1002288
Sí, debería haber sido más claro allí, n es el tamaño del diccionario y la matriz de cadenas que se le daría sería l quizás y luego el tiempo de ejecución sería O (lk) una vez que el diccionario había sido construido – silleknarf
Esta es una solución loca. Usando su esquema, la palabra "pizza" resulta en un valor mayor que 9.6 e19. Sus valores excederán regularmente el rango de números de 64 bits, y hay palabras en inglés que excederán el rango de números de 128 bits. Será mejor que utilices las teclas de cadena. –