Zeit Komplexität der Permutationsfunktion

9

Geben Sie eine gegebene Anzahl von eindeutigen Zahlen zurück und geben Sie alle möglichen Permutationen zurück.

  

Zum Beispiel haben [1,2,3] die folgenden Permutationen:
   1,2,3, 1,3,2, 2,1,3, 2,3,1, 3,1,2, 3,2,1] / p>

Meine iterative Lösung ist:

%Vor%

Meine rekursive Lösung ist:

%Vor%

Nach meiner Aussage ist die Zeitkomplexität (big-Oh) meiner iterativen Lösung: n * n (n + 1) / 2 ~ O (n ^ 3)
Ich bin nicht in der Lage, die zeitliche Komplexität meiner rekursiven Lösung herauszufinden Kann jemand die Komplexität beider erklären?

    
ojas 13.01.2017, 05:11
quelle

2 Antworten

1

Die rekursive Lösung hat eine Komplexität von O(n!) , da sie von der folgenden Gleichung bestimmt wird: T(n) = n * T(n-1) + O(1) .

Die iterative Lösung hat drei verschachtelte Schleifen und hat daher eine Komplexität von O(n^3) .

Die iterative Lösung erzeugt jedoch keine korrekten Permutationen für eine beliebige Zahl außer 3 .

Für n = 3 können Sie n * (n - 1) * (n-2) = n! sehen. Die LHS ist O(n^3) (oder vielmehr O(n^n) seit n=3 hier) und die RHS ist O(n!) .

Für größere Werte der Größe der Liste, sagen wir n , könnten Sie n verschachtelte Schleifen haben, die gültige Permutationen liefern. Die Komplexität in diesem Fall ist O(n^n) , und das ist viel größer als O(n!) , oder besser gesagt, n! < n^n . Es gibt eine ziemlich nette Beziehung namens Stirling's Approximation , die diese Beziehung erklärt.

    
user1952500 13.01.2017, 07:03
quelle
3

Es ist die Ausgabe (die sehr groß ist), die bei diesem Problem eine Rolle spielt, nicht die Implementierung der Routine. Für n distinct-Elemente gibt es n! permutations, die als Antwort zurückgegeben werden, und somit haben wir mindestens O(n!) complexity.

Mit Hilfe von Stirlings Annäherung

%Vor%

wir können leicht sehen, dass O(n!) > O(n^c) für jede Konstante c ist, deshalb ist es egal, ob die Implementierung selbst ein weiteres O(n^3) seit

hinzufügt %Vor%     
Dmitry Bychenko 13.01.2017 07:03
quelle