Informatik 1 - Mitschriften von Klaas Ole Kürtz
Informatik 1 - Mitschriften von Klaas Ole Kürtz
Informatik 1 - Mitschriften von Klaas Ole Kürtz
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
(vereinigung (cdr m1) m2)))))<br />
Wichtiger Aspekt: Effizienz? n: Mäachtigkeit der Menge(n).<br />
• element? O(n)<br />
• hinzufuegen O(n 2 )<br />
• schnitt O(n 2 ) wegen element? und Rekursion über m1<br />
Damit auf jeden Fall zu langsam für große Mengen. Verbesserung: Ordne die<br />
Elemente in aufsteigender Reihenfolge, Voraussetzung: es existiert eine totale<br />
Ordnung auf Elementen; d.h. hier werden nur Zahlen betrachtet. Notwendig:<br />
Veränderung der hinzufügen-Funktion<br />
(define (hinzufügen x m)<br />
(cond ((null? m) (cons x m))<br />
((= x (car m)) m)<br />
((< x (car m)) (cons x m))<br />
(else (cons (car m) (hinzufügen x (cdr m))))))<br />
Komplexität: Im Durchschnitt n Vergleiche, aber Größenordnung O(n). Verbesserung<br />
<strong>von</strong> schnitt: Gleichzeitiges Durchlaufen beider Liste: Vergleiche<br />
2<br />
Anfangselemente. Sind beide gleich, so kommt das Element in den Schnitt;<br />
ansonsten kommt das kleinere Element nicht in den Schnitt.<br />
(define (schnitt m1 m2)<br />
(if (or (null? m1) (null? m2)) leer<br />
(let ((x1 (car m1)) (x2 (car m2)))<br />
(cond ((= x1 x2) (cons x1<br />
(schnitt (cdr m1)<br />
(cdr m2))))<br />
((< x1 x2) (schnitt (cdr m1) m2))<br />
((> x1 x2) (schnitt (cdr m2) m1))))))<br />
Komplexität: in jedem Schritt Wegnahme eines Elementes, daher |m 1 | + |m 2 |<br />
Schritte, also O(n) statt O(n 2 ). Analog dazu ist die Vereinigung. Trotzdem ist<br />
diese Implementierung noch relativ aufwendig: elemenet? und hinzufügen.<br />
Bessere Idee: Mengen als geordnete binäre Bäume darstellen. D.h. es gibt<br />
immer zwei Teilbäume, die so geordnet sein sollen, daß der linke Teilbaum<br />
nur kleinere als der Knoten und der rechte Teilbaum nur größere Elemente<br />
als der Knoten enthält, die Darstellung ist jedoch nicht eindeutig. Der Vorteil<br />
dieser Darstellung: die element?-Funktion wird schneller:<br />
28