Bahnplanungsframework für ein autonomes Fahrzeug - oops ...
Bahnplanungsframework für ein autonomes Fahrzeug - oops ...
Bahnplanungsframework für ein autonomes Fahrzeug - oops ...
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
72 Suchalgorithmen<br />
Das Ansehen des ersten Elements geschieht direkt in konstanter Zeit, denn es liegt an der Wurzel.<br />
Will man dieses Element gleichzeitig entfernen, so müssen die beiden Teilbäume gemischt (engl.<br />
merge) werden. Da<strong>für</strong> geht die rekursive Funktion bis zum tiefsten Element und mischt dabei jeweils<br />
die Teilbäume, was im middle case log 2 (n) Schritte braucht und im worst case, wenn der Baum<br />
entartet ist und als lineare Liste vorliegt, braucht dieser im Mittel n 2<br />
Schritte. Zum Einfügen wird das<br />
neue Element als Baum angesehen und muss mit dem bereits bestehenden Baum gemischt werden,<br />
was wiederum bis zum tiefsten Element rekursiv mischt und ähnlich zum Entfernen im middle case<br />
log 2 (n) Schritte braucht. Die Tabelle (Tab. 6.7) vergleicht die Komplexität <strong>ein</strong>es Skew Heaps mit der<br />
<strong>ein</strong>er naiven Liste.<br />
Skew Heap<br />
Naive Liste<br />
middle case worst case middle case worst case<br />
kl<strong>ein</strong>stes Element ansehen O(1) O(1) O(n) O(n)<br />
kl<strong>ein</strong>stes Element entfernen O(log 2 n) O(n) O(n) O(n)<br />
Element hinzufügen O(log 2 n) O(n) O(n) O(n)<br />
Beliebiges Element entfernen O(n) O(n) O(n) O(n)<br />
(Tab. 6.7): Vergleich Skew Heap mit <strong>ein</strong>er naiven Liste.<br />
6.3.2 SORTIERTE LISTE<br />
Eine weitere Möglichkeit bietet <strong>ein</strong>e Sortierte Liste. Dadurch dass nur <strong>ein</strong>zelne Elemente <strong>ein</strong>gefügt<br />
werden, kann <strong>ein</strong>e Liste leicht sortiert gehalten werden, wodurch sich das Entfernen des kl<strong>ein</strong>sten<br />
Elements auf <strong>ein</strong>en konstanten Zugriff minimiert. Es gibt verschiedene Möglichkeiten die Liste sortiert<br />
zu halten, neben dem naiven Ansatz den Einfügeplatz von Beginn der Liste iterativ zu suchen,<br />
kann das Prinzip „Devide & Conquer“ ausgenutzt werden. Man teilt die Liste in zwei Hälften und<br />
schaut sich das mittlere Element an, ist das <strong>ein</strong>zufügende Element größer als dieses, so kommt als<br />
Einfügestelle nur die hintere Hälfte in Frage, denn alle Elemente der ersten Hälfte sind kl<strong>ein</strong>er. Dies<br />
kann man rekursiv weiter fortführen, bis die zu untersuchende Liste k<strong>ein</strong> <strong>ein</strong>ziges Element mehr enthält,<br />
was die Einfügestelle <strong>für</strong> das Element ist. Der Vorteil zu dem zuvor genannten Skew Heap ist,<br />
dass die Binäre Suche immer ausgenutzt werden kann und es k<strong>ein</strong>en Baum gibt der entarten kann,<br />
sondern die Suche den Bereich immer teilt und somit auch im worst case die Suche log 2 (n) Schritte<br />
braucht (Tab. 6.8).<br />
Skew Heap<br />
Sortierte Liste<br />
middle case worst case middle case worst case<br />
kl<strong>ein</strong>stes Element ansehen O(1) O(1) O(1) O(1)<br />
kl<strong>ein</strong>stes Element entfernen O(log 2 n) O(n) O(1) O(1)<br />
Element hinzufügen O(log 2 n) O(n) O(log 2 n) O(log 2 n)<br />
Beliebiges Element entfernen O(n) O(n) O(log 2 n) O(log 2 n)<br />
(Tab. 6.8): Vergleich Skew Heap mit <strong>ein</strong>er sortierten Liste.<br />
Ein generischer Algorithmus zum Einfügen in <strong>ein</strong>e solche Liste könnte folgendermassen aussehen<br />
(Algorithmus 6.3):