28.02.2014 Aufrufe

Bahnplanungsframework für ein autonomes Fahrzeug - oops ...

Bahnplanungsframework für ein autonomes Fahrzeug - oops ...

Bahnplanungsframework für ein autonomes Fahrzeug - oops ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

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 />

{

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!