Dato un array di stringhe, restituisce tutti i gruppi di stringhe che sono anagrammi.Dato un array di stringhe, restituisce tutti i gruppi di stringhe che sono anagrammi
soluzioni My:
Per ogni parola stringa nella matrice, ordinamento è O (m lg m), m è la lunghezza media di una parola.
Compilare una tabella hash < string, lista>.
Inserisci la parola ordinata nella tabella hash come chiave e genera anche tutte le permutazioni (O (m!)) Della parola, cerca ogni permutazione in un dizionario (una mappa albero prefisso) con O (m), se è nel dizionario, metti (O (1)) nella tabella hash in modo che tutte le parole permutate vengano inserite nella lista con la stessa chiave.
Totalmente, O (n * m * lg m * m!) Ora e O (n * m!) Spazio, n è la dimensione della matrice data.
Se m è molto grande, non è efficiente, m! .
Qualche soluzione migliore?
grazie
Dobbiamo anche considerare il costo di creazione dell'alfabeto O (sizeof (dizionario) * k). Nella tua soluzione, O (nk) è per l'array di stringhe specificato non per il dizionario. grazie – user1002288
Sì, avrei dovuto essere più chiaro lì, n è la dimensione del dizionario e l'array di stringhe che ti è stato assegnato sarebbe forse il runtime sarebbe O (lk) una volta che il dizionario è stato creato – silleknarf
Questa è una soluzione pazzesca. Usando il tuo schema, la parola "pizza" ha un valore superiore a 9,6 e 19. I tuoi valori supereranno regolarmente la gamma di numeri a 64 bit e ci saranno parole inglesi che supereranno l'intervallo di numeri a 128 bit. Stai meglio usando le chiavi di stringa. –