Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.

Ähnliche Präsentationen


Präsentation zum Thema: "Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas."—  Präsentation transkript:

1 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas Hilpold Institut für Wirtschaftsinformatik Software Engineering JKU Linz Termin 8 – Bäume

2 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 2 Lösung Übung 6 Themenbereiche heute Bäume Binärbaume einfache Algorithmen auf Bäume rekursiv und iterativ Übungsbesprechung Übung 8 Übersicht

3 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 3 Lösung Ü6

4 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 4 Rückblick letztes Mal rekursive Algorithmen ruft sich selbst auf enthalt rek. und nicht-rek. Zweige rekursive Algorithmen auf Listen Liste -> einfache rek. Datenstruktur

5 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 5 Bäume Allgemeines rekursive Datenstruktur Definition (vereinfacht): Eine Baumstruktur T ist entweder die leere Struktur ein Knoten mit einer endlichen Zahl verknüpfter Baumstrukturen T (Teilbäume) Wurzel innerer Knoten Blatt (ohne Nachfolger) oder Endelement Level (Stufe) 0 Grad d Baumes = 3 (max Nachfolger eines inneren Knotens) Stufe 1 Stufe 2 Stufe 3 = max Höhe = max Stufe + 1 = 4

6 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 6 Bäume Allgemeines (2) allgemeiner Baum Bäume vom Grad 2 heißen binär; Binärbaum (binary tree) Ternärbaum (Grad = 3) Grad = max Anzahl der Nachfolger eines Knotens im Baum Wurzel x ist Vorgänger von y (ascendent) Level (Stufe) 0 y ist Nachfolger von x (descentant) Stufe 1 Stufe 2 Stufe 3

7 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 7 Binärbaum Allgemeines Bäume vom Grad 2 heißen binär; Binärbaum (binary tree) Beispiele: Stammbaum (Vater/Mutter), Turniere (2 Spieler, 1 Gewinner steigt auf), arithmetischer Ausdruck ((1+2)*(2+4); jeder Operator 2 Operanden) WurzelLevel (Stufe) 0 Stufe 1 Stufe 2 Stufe 3 type BinaryTree = { refType Node = { int value Node left Node right }

8 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 8 Binärer Suchbaum Begriff Ein binärer Suchbaum ist ein binärer Baum, in dem die Knoten so geordnet sind, daß wenn Value der Informationsteil eines Knotens ist, die Informationsteile aller linken Abkömmlinge “kleiner” und die aller rechten Abkömmlinge “größer” als value sind. weitere Übung WurzelLevel (Stufe) 0 Stufe 1 Stufe 2 Stufe 3 type BinaryTree = { refType Node = { int value Node left Node right } Node root; init() {root = null};... //Algorithmen }

9 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 9 Binärer Suchbaum Suchen boolean search(  int v) Idee: falls knotenwert == v -> gefunden falls v > value suche rechts, sonst links falls aktueller Knoten == null -> false type BinaryTree = { refType Node = { int value Node left Node right } Node root; init() {root = null};... //Algorithmen }

10 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 10 Binärer Suchbaum Suchen (rekursiv) boolean search(  int v) Idee: falls knotenwert == v -> gefunden falls v > value suche rechts, sonst links falls aktueller Knoten == null -> false type BinaryTree = {... boolean search (int v){ return searchR(root, v) }//insert boolean searchR(Node t, int v){ if (t == null) { return false } if (t^.v == v) { return true } if (v < t^.v) return searchR(t^.left, v) else return searchR(t^.right, v) }//searchR }//Tree

11 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 11 Binärer Suchbaum Suchen iterative Lösung für Suchen Lösung einfach, da nur ein Pfad zur Lösung beschritten werden muß! Solange cur != gesuchtes { wenn v > Cur, cur = rechter Nachfolger....

12 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 12 Binärer Suchbaum Suchen type BinaryTree = {... boolean search (int v){ Node n n = root while (n != null && n^.value != v){ if (v < n^.value) n = n^.left else n = n^.right } return n != null } }//BinaryTree

13 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 13 Binärbaum Baumtraversierung * + - * d e a f Inorder (links, Knoten, rechts) Praeorder (Knoten, links, rechts) Postorder (links, rechts, Knoten) Level order (Ebenen) / b Inorder (a+b)*(d-(e*f)) Praeorder ? Postorder ? Level order ? Kein Suchbaum!! * + a b – d * e f a b + d e f * - * * + - a b d * e f Man merkt sich bei Rekursionsschritt bisherige Knoten und wie weit diese bearbeitet wurden. -> Stack

14 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 14 Binärer Suchbaum Iterative Algorithmen: Iterative Suche im Binärbaum -> einfach Im allgemeinen sind iterative Alg. auf Bäumen rel. kompliziert Beispiel: iterative Traversierung (praeorder) Problem: Im Unterschied zur Suche (1Pfad) muß man sich Knoten merken. Knoten / links / rechts > Idee: Zunächst zu merkende Knoten auf einen Stack legen

15 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 15 Binärer Suchbaum Algorithmus (iterative Traversierung praeorder): type Tree { reftype Node {...} preorderI(Node n){ Stack s; s.init() while (n <> null) { write(n^.v) if (n^.right != null) s.push(n^.right) if (n^.left != null) n = n^.left else n = s.pop() }//while }//preorderI Idee: schreibe Knoten merke rechten Nachfolger gehe zu linken Knoten falls null. hole zuletzt gemerkten Knoten und gehe zu rechtem Knoten

16 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 16 Binärer Suchbaum Algorithmus (iterative Traversierung praeorder): type Tree { reftype Node {...} preorderI(Node n){ Stack s; s.init() while (n <> null) { write(n^.v) if (n^.right != null) s.push(n^.right) if (n^.left != null) n = n^.left else n = s.pop() }//while }//preorderI

17 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 17 Binärer Suchbaum einfacher Stack (Array): type Stack { int[1:] stack int sp // stack pointer init() { sp = 0} boolean isEmpty(){ return (sp == 0) }//isEmtpy push (Node n){ sp = sp+1 stack[sp] = n }//push Node pop(){ if (!isEmtpy){ sp = sp-1 return stack[sp+1] } else return null; }//pop }//Stack : push (3)2: pop (): 3

18 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 18 Zusammenfassung Baum ist eine rekursive Datenstruktur Begriffe: Grad, Höhe, Wurzel, Stufe, Blatt, Innerer Knoten Binärbaum binärer Suchbaum Search rekursiv / iterativ -> auch iterativ einfach (selten) Baumtraversierung binärer Bäume Iterative Lösung für praeorder Traversierung -> rel. kompliziert

19 Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 19 Übung 8 ad 1) Binarytree rek. Algorithmen intsize() {... } // Anzahl d. Knoten boolean contains(  int value){... } int height(){... } // Anzahl der Ebenen free(){... } ad 2) iteratives Einfügen in Binärbaum ad 3) Stammbaum areParents(char[] father, char[] mother) Hinweise: Zunächst Algorithmus für einfach Beispiele überlegen: zb. 1 Knoten, null, 2, 3 Knoten Rekursive Definition beachten !


Herunterladen ppt "Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas."

Ähnliche Präsentationen


Google-Anzeigen