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.
6.3 Datenstrukturen 69<br />
6.3.1 SKEW HEAP<br />
Der Skew Heap ist <strong>ein</strong>e spezielle Prioritätswarteschlange (Sleator & Tarjan 1986 [36]). In erster Linie<br />
ist der Skew Heap von der Datenstruktur <strong>ein</strong> binärer Baum (engl. binary tree), an dessen Wurzel sich<br />
das kl<strong>ein</strong>ste (oder größte, je nach Sortierungsart) Element befindet. Mit absteigender Tiefe werden<br />
die Elemente immer größer, so dass sich an dessen Blättern die größten Elemente des Baumes befinden.<br />
Der Skew Heap stellt <strong>ein</strong>e rekursive Funktion private SkewNode merge(SkewNode<br />
left, SkewNode right) bereit, die zwei Skew Heaps zu <strong>ein</strong>em zusammenfasst. Dabei werden<br />
gleichzeitig der linke und rechte Teilbaum ständig vertauscht, wo durch diese Verwirbelung die Ausgeglichenheit<br />
des Baums zumindest im Mittel bewahrt wird. Ein generischer Algorithmus <strong>ein</strong>es Skew<br />
Heaps ist im Algorithmus (6.2) beschrieben, dieser kann als Bibliothek kompiliert auch in anderen<br />
Projekten verwendet werden, da<strong>für</strong> müssen die zu sortierenden Elemente nur das Interface IComparable<br />
implementieren.<br />
1 p u b l i c c l a s s SkewHeap where T : IComparable<br />
{<br />
3 p u b l i c SkewNode r o o t = n u l l ;<br />
p u b l i c i n t Count { p r i v a t e s e t ; g e t ; }<br />
5<br />
p u b l i c T Peek ( )<br />
7 {<br />
i f ( r o o t == n u l l )<br />
9 r e t u r n d e f a u l t ( T ) ;<br />
r e t u r n r o o t . Data ;<br />
11 }<br />
13 p u b l i c T G e t F i r s t ( )<br />
{<br />
15 i f ( r o o t == n u l l )<br />
r e t u r n d e f a u l t ( T ) ;<br />
17<br />
T r e s = r o o t . Data ;<br />
19 r o o t = merge ( r o o t . Left , r o o t . R i g h t ) ;<br />
Count −−;<br />
21 r e t u r n r e s ;<br />
}<br />
23<br />
p u b l i c v oid Add ( T d a t a )<br />
25 {<br />
SkewNode node = new SkewNode( d a t a ) ;<br />
27 r o o t = merge ( r o o t , node ) ;<br />
Count ++;<br />
29 }<br />
31 p r i v a t e SkewNode merge ( SkewNode l e f t , SkewNode r i g h t )<br />
{