Bubble sort worst case Beispiel ist O (n * n), wie?

7

Ich versuche Bubble sort. Es gibt 5 Elemente und das Array ist unsortiert. Der schlechteste Fall für die Blasensortierung sollte O (n ^ 2) sein.

Als Beispiel verwende ich

A = {5, 4, 3, 2, 1}

In diesem Fall sollte der Vergleich 5 ^ 2 = 25 sein. Mit der manuellen Verifizierung und dem Code erhalte ich eine Vergleichszahl von 20. Im Folgenden finden Sie den Bubble-Sort-Implementierungscode

%Vor%

Die Ausgabe folgt

  1. - & gt; 45321
  2. - & gt; 43521
  3. - & gt; 43251
  4. - & gt; 43215
  5. - & gt; 34215
  6. - & gt; 32415
  7. - & gt; 32145
  8. - & gt; 32145
  9. - & gt; 23145
  10. - & gt; 21345
  11. - & gt; 21345
  12. - & gt; 21345
  13. - & gt; 12345
  14. - & gt; 12345
  15. - & gt; 12345
  16. - & gt; 12345
  17. - & gt; 12345
  18. - & gt; 12345
  19. - & gt; 12345
  20. - & gt; 12345

Irgendeine Idee, warum die Mathematik nicht 25 sein wird?

    
bubbleQ 20.12.2009, 01:24
quelle

6 Antworten

26

Die Big-O-Notation sagt nichts darüber aus, wie viele Iterationen (oder wie lange) ein Algorithmus dauert. Dies ist ein Hinweis auf das Wachstum rate einer Funktion, wenn die Anzahl der Elemente zunimmt (normalerweise gegen unendlich).

In diesem Fall bedeutet O (n 2 ) einfach, dass die Berechnungsressourcen der Blasensorte um das Quadrat als Anzahl der Elemente wachsen. Also, wenn Sie doppelt so viele Elemente haben, können Sie erwarten, dass es (schlimmstenfalls) 4-mal so lange dauert (wie eine obere Grenze). Wenn Sie 4-mal so viele Elemente haben, erhöht sich die Komplexität um den Faktor 16. Etc.

Für einen Algorithmus mit O (n 2 ) -Komplexität könnten fünf Elemente 25 Iterationen oder 25.000 Iterationen benötigen. Es gibt keine Möglichkeit zu sagen, ohne den Algorithmus zu analysieren. In gleicher Weise könnte eine Funktion mit O (1) -Komplexität (konstante Zeit) 0,000001 Sekunden zur Ausführung oder zwei Wochen zur Ausführung benötigen.

    
Robert Cartaino 20.12.2009 02:30
quelle
7

Wenn ein Algorithmus n^2 - n -Operationen akzeptiert, wird dies immer noch auf O(n^2) vereinfacht. Die Big-O-Notation ist nur eine Annäherung an die Skalierung des Algorithmus und nicht eine exakte Messung, wie viele Operationen für eine bestimmte Eingabe erforderlich sind.

    
Bill the Lizard 20.12.2009 16:11
quelle
5

Betrachten Sie: Ihr Beispiel, bubble-sorting 5 Elemente, nimmt 5x4 = 20 Vergleiche. Das Verallgemeinern von N Elementen zur Blasensortierung erfordert N x (N-1) = N ^ 2 - N Vergleiche, und N ^ 2 erhält sehr schnell eine LOT, die größer als N ist. Hier kommt O (N ^ 2) her. (Für 20 Elemente sehen Sie beispielsweise 380 Vergleiche.)

    
John R. Strohm 21.12.2009 03:59
quelle
4

Bubble sort ist ein spezieller Fall und seine volle Komplexität ist (n * (n-1)) - was Ihnen die richtige Anzahl gibt: 5 Elemente führen zu 5 * (5-1) Operationen, die 20 ist, und was Sie im schlimmsten Fall gefunden haben.

Die vereinfachte Big O-Notation entfernt jedoch die Konstanten und die am wenigsten signifikant wachsenden Terme und gibt nur O ( n ^ 2). Dies macht es leicht, es mit anderen Implementierungen und Algorithmen zu vergleichen, die nicht genau (n * (n-1)) haben, aber wenn es vereinfacht wird, zeigt sich, wie die Arbeit mit einer größeren Eingabe zunimmt.

Es ist viel einfacher, die Big-O-Notation zu vergleichen, und bei großen Datasets sind die Konstanten und die kleineren Terme vernachlässigbar.

    
Adam Davis 14.01.2010 18:51
quelle
3

Denken Sie daran, dass O (N ^ 2) vom tatsächlichen Ausdruck von C * N (2) vereinfacht ist; das heißt, es gibt eine beschränkte Konstante. Für Bubble-Sort wäre C zum Beispiel ungefähr 1/2 (nicht genau, aber nahe).

Ihre Vergleichszahl ist auch aus, ich denke, es sollten 10 paarweise Vergleiche sein. Aber ich denke, Sie könnten erwägen, Elemente zu tauschen, um eine andere zu sein. So oder so ändert sich nur die Konstante, nicht der wichtigere Teil.

    
StaxMan 20.12.2009 01:34
quelle
1
%Vor%

Die Vergleichszahl für 5 (0: 4) Elemente sollte 10 sein.

%Vor%     
Fly 24.11.2013 13:28
quelle

Tags und Links