Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido

Ähnliche Präsentationen


Präsentation zum Thema: "EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido"—  Präsentation transkript:

1

2 EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido dittrich@cs.uni-dortmund.de

3 Kap 9: DurchlaufstrategienVorl EINI-I"Prof. Dr. G. Dittrich 2 25.1.2000 Gliederung Kapitel 9 Einfache Dateibehandlung Beispiel: Wörter zählen –Problem, Datenstruktur –Einfügen: Strategie + Implementierung –Alphabetisch geordnete Ausgabe: Strategie + Impl. Durchlaufstrategien –In die Tiefe Inorder Präorder Postorder –In die Breite

4 Kap 9: DurchlaufstrategienVorl EINI-I"Prof. Dr. G. Dittrich 3 25.1.2000 Dateien Einfache Dateibehandlung –(externe Dateien, Öffnen, Lesen/Schreiben, Schließen). –Am Beispiel: Problem, die Wörter in einem gegebenen Text zu zählen und sie mit ihrer Häufigkeit alphabetisch geordnet auszugeben. Zunächst: Dateien Lies aus einer Eingabe-Datei, schreibe in eine Ausgabe-Datei. Am elementaren Beispiel. Programm

5 Kap 9: DurchlaufstrategienVorl EINI-I"Prof. Dr. G. Dittrich 4 25.1.2000 Dateien #include bindet die Bibliothek zur Dateibehandlung ein Bindung von Datei-Variablen (im Programm) an Dateien (im Dateisystem) beim Öffnen der Datei. ifstream *Eingabedatei; EingabeDatei = new ifstream (inpDat); Benutzung von Dateien: wie Standard Ein-/Ausgabe –ifstream : Eingabe - ofstream : Ausgabe Benutzung: wie cin –*Eingabedatei >> gelesen;

6 Kap 9: DurchlaufstrategienVorl EINI-I"Prof. Dr. G. Dittrich 5 25.1.2000 Dateien Testen: !(*Eingabedatei).eof() (liefert "true" genau dann, wenn das Ende der Datei noch nicht erreicht ist; eof: end of file) Analog: ofstream *AusgabeDatei; Werden Dateien zum Schreiben geöffnet, so geht meist ihr vorheriger Inhalt verloren.

7 Kap 9: DurchlaufstrategienVorl EINI-I"Prof. Dr. G. Dittrich 6 25.1.2000 Wörter zählen Problem: –zähle die Wörter in einem gegebenen Text, –gib sie mit ihrer Häufigkeit alphabetisch geordnet aus. Datenstruktur: –binärer Suchbaum (--> Wörter lassen sich ordnen) –erweitert um einen Zähler.

8 Kap 9: DurchlaufstrategienVorl EINI-I"Prof. Dr. G. Dittrich 7 25.1.2000 Datenstruktur zum Zählen von Wörtern text zaehler LSohnRSohn struct BinBaum { char text[maxLen]; int zaehler; BinBaum * LSohn, *RSohn; } ;

9 Kap 9: DurchlaufstrategienVorl EINI-I"Prof. Dr. G. Dittrich 8 25.1.2000 Strategie zum Einfügen Suchen nach einer Zeichenkette im binären Suchbaum –Zeichenkette nicht gefunden: neuen Knoten einfügen, Zähler zu 1 initialisieren –Zeichenkette gefunden: Zähler um 1 erhöhen

10 Kap 9: DurchlaufstrategienVorl EINI-I"Prof. Dr. G. Dittrich 9 25.1.2000 void strcpy(char *, char *); int strcmp(char *, char *); BinBaum * Einfuegen(BinBaum *B, char * k) { if (B == NULL) { BinBaum *Hilf = new BinBaum; strcpy(Hilf->text, k); Hilf->zaehler = 1; Hilf->LSohn = Hilf->RSohn = NULL; return Hilf; } else { int Vergl = strcmp(B->text,k); if (Vergl < 0) B->RSohn = Einfuegen(B->RSohn, k); else if (Vergl > 0) B->LSohn = Einfuegen(B->LSohn, k); else if (Vergl == 0) B->zaehler += 1; return B; } Text noch nicht gesehen Text bekannt: einfügen, Zähler erhöhen

11 Kap 9: DurchlaufstrategienVorl EINI-I"Prof. Dr. G. Dittrich 10 25.1.2000 Alphabetisch geordnete Ausgabe Behauptung: Nachfolgender Durchlauf liefert als Resultat: –geordnete Ausgabe Durchlaufstrategie: –Durchlaufe den binären Suchbaum mit Wurzel w rekursiv wie folgt: Durchlauf durch den linken Unterbaum von w Ausdruck (der Nutzinfo) der Wurzel w Durchlauf durch den rechten Unterbaum von w

12 Kap 9: DurchlaufstrategienVorl EINI-I"Prof. Dr. G. Dittrich 11 25.1.2000 Beispiel (Baumdurchlauf) 47 6 17 18 23 26 47 6 17 18 23 26 46717182326

13 Kap 9: DurchlaufstrategienVorl EINI-I"Prof. Dr. G. Dittrich 12 25.1.2000 Beweis Durch vollständige Induktion nach der Anzahl der Knoten –Der Induktionsbeginn (kein Knoten) ist erfüllt –Der Induktionsschritt: der linke Unterbaum wird geordnet ausgegeben (IV), dann wird die Wurzel ausgegeben, dann wird der rechte Unterbaum geordnet ausgegeben (IV). (Die Wurzel steht bzgl. der Ordnung "in der Mitte".)

14 Kap 9: DurchlaufstrategienVorl EINI-I"Prof. Dr. G. Dittrich 13 25.1.2000 Programmtext: Ausdrucken void KnotenDruck(BinBaum *, ofstream *); void Ausdrucken(BinBaum *K, ofstream *aus) { if (K != NULL) { Ausdrucken(K->LSohn, aus); KnotenDruck(K, aus); Ausdrucken(K->RSohn, aus); } } Programm

15 Kap 9: DurchlaufstrategienVorl EINI-I"Prof. Dr. G. Dittrich 14 25.1.2000 Anmerkungen Zugriff auf Ein- und Ausgabedateien wird über Zeiger auf ifstream- und ofstream- Variablen bewirkt. Initialisierungen –EingabeDatei = new ifstream(inpDat); –AusgabeDatei = new ofstream(outpDat); Varianten (Ausgabedateien als Konstante bekannt) z.B.: –ofstream *Ausgabe = new ofstream("von.aus");

16 Kap 9: DurchlaufstrategienVorl EINI-I"Prof. Dr. G. Dittrich 15 25.1.2000 BinBaum * Einfuegen(BinBaum *, char *); BinBaum * Einlesen(ifstream *inp) { BinBaum *bst = NULL; char gelesen[maxLen]; *inp >> gelesen; while (!(*inp).eof()) { bst = Einfuegen(bst, gelesen); *inp >> gelesen; } return bst; } Feinheiten: *inp und (*inp).eof()

17 Kap 9: DurchlaufstrategienVorl EINI-I"Prof. Dr. G. Dittrich 16 25.1.2000 Analog: Ausgabe void Schreiben(char *, int, ofstream *); void KnotenDruck(BinBaum *T, ofstream *aus){ Schreiben(T->text, T->zaehler, aus); } void Schreiben( char * s, int k, ofstream *aus ){ *aus << k << "\t\t\t" << s << endl; }

18 Kap 9: DurchlaufstrategienVorl EINI-I"Prof. Dr. G. Dittrich 17 25.1.2000 Durchlauf durch Bäume 47 6 17 18 23 26 Diese Art des Durchlaufs heißt Inorder-Durchlauf. w BLinksBRechts Inorder () Inorder(Wurzel BLinks) Druck(w) Inorder(Wurzel BRechts) = 46717182326

19 Kap 9: DurchlaufstrategienVorl EINI-I"Prof. Dr. G. Dittrich 18 25.1.2000 w BLinksBRechts Präorder () Präorder(Wurzel BLinks) Druck(w) Präorder(Wurzel BRechts) = 17 6 47 23 1826 17647231826

20 Kap 9: DurchlaufstrategienVorl EINI-I"Prof. Dr. G. Dittrich 19 25.1.2000 w BLinks BRechts Postorder ( ) Postorder(Wurzel BLinks) Druck(w) Postorder(Wurzel BRechts) = 47 6 1826 23 17 47618262317

21 Kap 9: DurchlaufstrategienVorl EINI-I"Prof. Dr. G. Dittrich 20 25.1.2000 Durchlaufstrategien Strategie bei allen drei Durchlaufarten heißt Tiefensuche: Es wird zunächst in die Tiefe und nicht in die Breite gegangen. Alternative: Breitensuche Trage den Baum "schichtenweise" ab.

22 Kap 9: DurchlaufstrategienVorl EINI-I"Prof. Dr. G. Dittrich 21 25.1.2000 Beispiel Breitensuche 623471826 17 623471826

23 Kap 9: DurchlaufstrategienVorl EINI-I"Prof. Dr. G. Dittrich 22 25.1.2000 Idee zur Implementation Verwalte die Knoten in einer "Warteschlange" ein Knoten wird gedruckt seine Söhne werden in die Warteschlange eingefügt bis die Warteschlange leer ist Initialisierung der Warteschlange mit der Wurzel des Baums.

24 Kap 9: DurchlaufstrategienVorl EINI-I"Prof. Dr. G. Dittrich 23 25.1.2000 Beispiel 17 623 471826 17623471826


Herunterladen ppt "EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido"

Ähnliche Präsentationen


Google-Anzeigen