Zeitkomplexität von 2 ^ sqrt (n)

11

Ich löse eine Algorithmusfrage und meine Analyse ist, dass sie auf O (2 ^ sqrt (n)) laufen würde. Wie groß ist das? Entspricht es O (2 ^ n)? Ist es noch nicht polynomielle Zeit?

Gaara
quelle
3
Bitte kommentieren Sie den Grund für die Ablehnung der Frage. Vielen Dank!
Gaara
4
Ehrlich gesagt, ich vermute, dass die Leute dies für eine äußerst triviale Frage halten, aber es ist mir nicht sofort klar, wie ich es so oder so beweisen soll, also werde ich eine Antwort schreiben und sehen, ob dies die Meinung der Leute ändert.
Ixrec
3
Subexponentielle
rwong
1
Groß! Subexponentielle Zeit: "Die Laufzeit eines Algorithmus kann schneller wachsen als jedes Polynom, ist aber immer noch deutlich kleiner als eine Exponentialzeit." Dies beantwortet definitiv meine Frage und erweitert mein Wissen über die Big O-Analyse. Vielen Dank
Gaara
1
Es ist viel kleiner als O (2 ^ n), insbesondere für große Zahlen. Nehmen Sie ein Beispiel für eine Sammlung von 10 000 Elementen. 2 ^ 10000 ist eine Zahl mit ungefähr 3000 Ziffern. So viele Zyklen würde es dauern, um eine O (2 ^ n) -Operation durchzuführen. Mit O (2 ^ sqrt (n)) haben Sie eine Zahl mit 30 Ziffern. Der Unterschied ist für große Zahlen zugunsten der sqrt-Lösung extrem groß (für 1 Million Elemente ist dies (Zahl mit 300 000 Stellen) * CPU-Zyklus gegenüber (Zahl mit 300 Stellen) * CPU-Zyklus).
Andy

Antworten:

16

Dies ist eine interessante Frage. Glücklicherweise ist es nicht besonders schwer, wenn Sie erst einmal wissen, wie man es löst.

Für die Funktionen f : NR + und g : NR + haben wir genau dann fO ( g ), wenn lim sup n → ∞ f ( n ) / g ( n ) ∈ R ist .

Eine Funktion f : NR + hat genau dann höchstens ein Polynomwachstum, wenn eine Konstante kN existiert, so dass fO ( nn k ) ist. Lassen Sie uns dies für beliebige, aber feste kN herausarbeiten .

lim sup n → ∞ 2 ( n 1/2 ) / n k =
lim n → ∞ 2 ( n 1/2 ) / n k =
lim n → ∞ e log (2) n 1/2 / e log ( n ) k =
lim n → ∞ e log (2) n 1/2 - log ( n ) k = ∞ ∞ R.

Die erste Gleichheit ist wahr, weil sowohl der Nominator als auch der Nenner monoton wachsende stetige Funktionen sind. Die zweite Gleichheit verwendet die Identität x y = e log ( x ) y . Die Grenze ist nicht endlich, da der Exponent im endgültigen Ausdruck oben nicht begrenzt ist. Ohne einen formalen Beweis kann angenommen werden, dass bekannt ist, dass n 1/2 log ( n ) asymptotisch dominiert . Daher übersteigt die fragliche Funktion das Polynomwachstum.

Sein Wachstum ist jedoch streng geringer als exponentiell, wobei Exponential (von mir zu diesem Zweck) als O ( n ↦ 2 c n ) für c > 0 definiert wird. Dies zu zeigen ist noch einfacher.

lim sup n → ∞ 2 c n / 2 ( n 1/2 ) = lim n → ∞ 2 c n - n 1/2 = ∞ ∞ R.

für jedes feste c > 0. Daher liegt die Komplexität der Funktion wirklich irgendwo zwischen Polynom und Exponential.

5gon12eder
quelle
6

Wie groß ist das? Nun, O (2 ^ sqrt (n)) ist genau wie groß es ist :-(

Um eine Vorstellung davon zu bekommen, was es bedeutet, stellen Sie sich vor, Ihr Algorithmus wäre nicht nur O (2 ^ sqrt (n)), sondern es dauert tatsächlich genau 2 ^ sqrt (n) Nanosekunden auf Ihrem Computer:

n = 100: 2 ^ 10 = 1024 Nanosekunden. Überhaupt keine Zeit. n = 1000: 2 ^ 31.xxx = 2 Milliarden Nanosekunden. Zwei Sekunden, das fällt auf. n = 10.000: 2 ^ 100 ≈ 10 ^ 30 Nanosekunden = 10 ^ 21 Sekunden = 30 Billionen Jahre.

Dies ist viel besser als 2 ^ n Nanosekunden, wobei n = 100 30 Billionen Jahre dauern würde, aber die Größe der Probleme, die Sie lösen können, ist immer noch recht begrenzt. Wenn Sie ein Problem als "lösbar" betrachten, wenn Ihr Computer es in einer Woche lösen kann, sind das ungefähr 6 x 10 ^ 14 Nanosekunden, das sind ungefähr n = 2.400. Andererseits können bis zu n = 400 in einer Millisekunde gelöst werden.

(In der Praxis dauern für n = 10.000 sowohl O (2 ^ sqrt (n)) als auch O (2 ^ n) genau die gleiche Zeit: Zu lange, um darauf zu warten.)

Es überschreitet jedes Polynom. Nehmen Sie einen anderen Algorithmus, der n ^ 1000 Sekunden dauert. Was für n = 2 praktisch unlösbar ist. Dieser Algorithmus dauert länger, bis n ungefähr 885 Millionen beträgt. Aber wirklich, wen interessiert das? Zu diesem Zeitpunkt beträgt die Anzahl der Jahre, die beide Algorithmen benötigen, 9.000 Stellen.

gnasher729
quelle