[Algoritmi] Problema algoritmi
Ciao a tutti,
non riesco a capire quale algoritmo utilizzare per implementare questo esercizio:
"Si progetti e analizzi un algoritmo efficiente che dato in input un array A[1 ... n] contenente
parole della lingua italiana (in ordine alfabetico) dia in output tutti gli insiemi di parole che
sono una l'anagramma dell'altra. Per esempio, uno degli insiemi dati in output potrebbe essere
{armo; mora; orma; ramo}.
Si puo assumere che non esistano parole di lunghezza superiore a 20."
Qualcuno può darmi uno spunto? Grazie,
non riesco a capire quale algoritmo utilizzare per implementare questo esercizio:
"Si progetti e analizzi un algoritmo efficiente che dato in input un array A[1 ... n] contenente
parole della lingua italiana (in ordine alfabetico) dia in output tutti gli insiemi di parole che
sono una l'anagramma dell'altra. Per esempio, uno degli insiemi dati in output potrebbe essere
{armo; mora; orma; ramo}.
Si puo assumere che non esistano parole di lunghezza superiore a 20."
Qualcuno può darmi uno spunto? Grazie,
Risposte
Strano, mi è capitato recentemente di parlarne con una mia amica che ha dovuto implementare qualcosa di simile per il corso di informatica.
Il mio consiglio è di "normalizzare" ogni parola. Insomma ogni elemento di quell'insieme è contrassegnato da una stessa distribuzione di lettere. Per esempio puoi contrassegnare quell'insieme con la stringa "amor". Per fare un esempio più lungo, la parola armadillo sarebbe invece associata alla stringa "aadillmor".
Certo questo metodo usa molta memoria.
Il mio consiglio è di "normalizzare" ogni parola. Insomma ogni elemento di quell'insieme è contrassegnato da una stessa distribuzione di lettere. Per esempio puoi contrassegnare quell'insieme con la stringa "amor". Per fare un esempio più lungo, la parola armadillo sarebbe invece associata alla stringa "aadillmor".
Certo questo metodo usa molta memoria.
L'idea è quella di considerare una parola per volta e inserirla nell'insieme corrispondente (in cui la chiave sarà la parola con le lettere ordinate in modo lessicografico). Puoi per esempio usare una mappa di liste per implementarlo.