Warum sollte man Lineare Listen (arrays) als Datenstruktur verwenden?
Lineare Listen haben erstmal sehr viele Nachteile...
- Die Datenstruktur ist nicht dynamisch (schwer zu erweitern)
- Das Suchen in Arrays ist nur schwer in O(log(n)) möglich, da die binäre Suche sehr viel extraspeicher benötigt, und Sprungsuchen / Interpolationssuchen häufig nicht in O(log(n)) funktionieren
- Sortierverfahren sind oftmals problematisch, da quicksort ggf. eine schlechte Worst-Case Komplexität hat.
- Alle Elemente müssen nebeneinander im Speicher liegen, d.h. es gibt ein Limit wie groß ich ein Array machen kann.
Dagegen sind Bäume:
- Dynamisch (sehr einfach zu erweitern, da man einfach nur Pointer hinzufügen muss)
- Suche funktioniert aufbaubedingt IMMER in O(log(n))
- Mit heapsort lässt sich immer im Worst-Case in O(n*log(n)) sortieren
- Die Datenstruktur kann beliebig groß werden (man muss nur Pointer hinzufügen).
Meine Frage also, warum sollte man lineare Listen verwenden, und Warum lernt man x verschiedene Sortierverfahren von Insertion, Selection, Merge, Bubble & Quicksort für lineare Listen, wenn die einfachste Lösung ist einfach Bäume zu verwenden?
2 Antworten
Beide Datenstrukturen haben ihre Vor- und Nachteile.
Die beim Anlegen eines Arrays vorzugebende Größe des Arrays ist durchaus ein Nachteil.
Wenn man das Array sortiert hat, kann man in O(log(n)) suchen. Wozu man da viel Extraspeicher benötigt, ist mir unklar.
Für Arrays funktioniert übrigens auch Heapsort, ohne Extraspeicher.
Für einen balancierten binären Baum braucht man für jeden Knoten zusätzlich zwei Pointer und mindestens zwei Extra-Bits, für ein Array nicht.
Die Implementierung von Bäumen ist nicht gerade trivial.
Die Tatsache, dass im Array die Elemente nebeneinander liegen, wird zum Vorteil, wenn man den Index eines Elements kennt oder einfach nur über alle Elemente iterieren will.
In der Praxis verwende ich beide Strukturen, je nach Bedarf.
Weil Bäume keinen Lookup des n-Ten Elements in konstanter Zeit können. Und weil nebeneinander liegende Werte im Array auch nebeneinander im Speicher liegen.
Arrays und Listen sind zwei verschiedene Datenstrukturen.
Anhängen in O(1), sonst ist Zugriff auf ein beliebiges Element O(n)
Das sind Linked Lists, Lists dürfte einfach nur der Oberbegriff sein.
Wo unterscheiden sich Arrays und Listen?