Estratto del documento

Problema delle permutazioni di una stringa

Esaminiamo un problema per il quale è relativamente facile trovare una soluzione ricorsiva, mentre è molto difficile trovarne una iterativa. Un esempio classico è determinare le permutazioni di una stringa, ovvero tutte le stringhe ottenibili utilizzando i caratteri della stringa di partenza in tutte le possibili disposizioni.

Facciamo l'ipotesi che non ci siano caratteri ripetuti. In questo caso, dalla matematica combinatoria sappiamo che il numero di permutazioni di N simboli è N!.

Esempio di permutazioni

Per la stringa "ABC", le permutazioni sono: ABC, ACB, BAC, BCA, CAB, CBA.

Algoritmo ricorsivo per le permutazioni

Utilizziamo un algoritmo ricorsivo per trovare le permutazioni di una stringa di lunghezza N:

  • Casobase: se N=1, l'unica permutazione è la stringa stessa.
  • Passo ricorsivo: altrimenti:
    • Generiamo tutte le permutazioni che iniziano con il primo carattere,
    • generiamo tutte le permutazioni che iniziano con il secondo carattere,
    • ... e così via. In questo modo otteniamo tutte le possibili permutazioni.

Esempio di codice

public static String[] getPermutations(String word) {
    // Caso base
    if (word.length() == 1)
        return new String[] {word};
    int nperm = 1; // il numero di permutazioni da generare
    for (int i = 2; i <= word.length(); i++)
        nperm *= i; // è il fattoriale di word.length()
    String[] perm = new String[nperm];
    for (int i = 0; i < word.length(); i++) {
        String subword = word.substring(0, i) + word.substring(i + 1);
        // Passo ricorsivo: permutazioni della sottosequenza
        String[] subperm = getPermutations(subword);
        for (int j = 0; j < subperm.length; j++)
            perm[i * subperm.length + j] = word.substring(i, i + 1) + subperm[j];
    }
    return perm;
}
Anteprima
Vedrai una selezione di 1 pagina su 1
Informatica I - le permutazioni Pag. 1
1 su 1
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher enricopava di informazioni apprese con la frequenza delle lezioni di Informatica 1 e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Padova o del prof Avanzini Federico.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community