Optimierung

Der InsertionSort an sich, hat kein besonderes Potential zur Optimierung. Allerdings gibt es einen wichtigen Punkt, den man bei der Implementierung nicht übersehen sollte.

Ausgehen von der Annahme, die Datenmenge sei ein kontiunierlich zusammenhängender Speicherbereich, ist das ständige Vorschieben des Markenelements bis zu seiner richtigen Position, eine effiziente Methode. Würde man zuerst die richtige Postion ausfindig machen und erst danach das Element an dieser einfügen, so müsste man das aufwendige Einfügen des Elements in die Datenmenge in Kauf nehmen. Aufwendig vor dem Hintergrund, da es notwendig ist, alle Elemente nach der Einfügeposition um eine Stelle zu verschieben, was eine Iteration über diese bedeutet und somit Rechenzeit kostet. Von daher ist das Vorschieben des Markenelements in einem kontinuierlichem Speicherbereich (Array) geradezu schon optimiert.

Genau umgekehrt jedoch sieht die Situation aus, wenn man von einer Datenmenge ausgeht, die als verkette Liste implementiert ist. Würde man das Markenelement wie in obiger Situation ständig vorschieben, würde dies eine ständige Neuverlinkung der Datenelemente bedeuten (siehe verkettete Listen). Da aber auf verketteten Listen die Einfügeoperation sehr effizient ist, liegt der Ansatz, zuerst die richtige Position ausfindig zu machen und das Markenelement erst dann dort einzufügen, viel näher und trägt zur Optimierung der Implementierung bei, da das ständige Verlinken vermieden wird. Um das Mass der Optimierung zu erfahren, werde man sich dessen bewusst, dass das Vorschieben des Markenelements im nichtoptimierten Fall grob geschätzt $n^2$ mal und im optimierten Fall nur noch $n$ mal ausgeführt wird. Dies heisst allerdings nicht, dass die Laufzeitkomplexität des Algorithmus verbessert wird. Dies ist nur eine Implementierungsoptimierung, die sich aber in der messbaren Ausführungszeit auf grossen Mengen durchaus bemerkbar machen kann.

Ein anderes Verfahren, dass zur Sortierung benutzt wird und auf dem InsertionSort aufbaut, heisst ShellSort und kann gegebenenfalls als eine Optimierte Variante des InsertionSorts aufgefasst werden. Der ShellSort wird separat behandelt und vorgestellt.


Nächste Seite  Aufwärts  Vorherige Seite  Inhalt 


Nächste Seite: SelectionSort Aufwärts: InsertionSort Vorherige Seite: Implementierung   Inhalt

2002-05-09