Heim > Backend-Entwicklung > PHP-Tutorial > Wie können wir effizient die n-te Permutation einer Menge finden?

Wie können wir effizient die n-te Permutation einer Menge finden?

Linda Hamilton
Freigeben: 2024-12-07 06:46:16
Original
342 Leute haben es durchsucht

How Can We Efficiently Find the n-th Permutation of a Set?

Effizienter Algorithmus zur Identifizierung der n-ten Permutation

Gegeben ein Array von Elementen, die eine Permutation darstellen, untersucht diese Frage die Möglichkeit eines Algorithmus, der Berechnet effizient die n-te Permutation, ohne alle vorhergehenden zu berechnen.

Faktoradisch Permutationszerlegung

Die Lösung nutzt das Konzept der faktoradischen Zerlegung. Durch aufeinanderfolgende Divisionen durch Fakultäten wird der Permutationsindex in eine Folge von Quotienten zerlegt. Diese Sequenz stellt die gewünschte Permutation dar.

Anpassen der Quotienten

Die anfänglichen Quotienten berücksichtigen jedoch die Auswirkungen vorheriger Werte. Daher ist ein Anpassungsschritt erforderlich. Für jeden Quotienten wird der Wert um die Anzahl der kleineren oder gleichen vorhergehenden Quotienten erhöht.

Implementierung

Eine C-Implementierung des Algorithmus ist unten angegeben:

void ithPermutation(const int n, int i) {
    int *fact = new int[n], *perm = new int[n];

    // Compute factorials
    fact[0] = 1;
    for (int k = 1; k < n; k++)
        fact[k] = fact[k - 1] * k;

    // Compute factorial code
    for (int k = 0; k < n; k++) {
        perm[k] = i / fact[n - 1 - k];
        i %= fact[n - 1 - k];
    }

    // Adjust values for permutation
    for (int k = n - 1; k > 0; k--)
        for (int j = k - 1; j >= 0; j--)
            if (perm[j] <= perm[k])
                perm[k]++;

    // Print permutation
    for (int k = 0; k < n; k++)
        cout << perm[k] << " ";
    cout << "\n";

    delete[] fact;
    delete[] perm;
}
Nach dem Login kopieren

Beispiel

Zum Beispiel, ithPermutation(10, 3628799) gibt die letzte Permutation von zehn Elementen zurück:

9 8 7 6 5 4 3 2 1 0
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie können wir effizient die n-te Permutation einer Menge finden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage