[Python-de] Kleine Aufgabe, große Wirkung
Walter Dörwald
walter at livinglogic.de
Mon Apr 7 17:18:13 EDT 2003
Martin v. Löwis wrote:
> Michael Janssen wrote:
>
>> wieviel Sinn macht so ein Baum? Sag es mir bitte einer, denn ich bin kein
>> Informatikstudent.
>
>
> Typisches Beispiel: Ein Dateibaum. Wurzelverzeichnis (C:\, oder /),
> Unterverzeichnisse (\WINNT oder /usr). Sortierkriterium: Keines, ausser
> vielleicht der Ordnunssinn der Systemautoren.
> Suchaufgabe: Finde alle Dateien, die am 23.12.2001 geändert wurden.
>
> "Breite zuerst" ist hier Geschmacksfrage, weil es z.B. als schöner
> empfunden wird, wenn die kurzen Pfadnamen zuerst rauskommen.
Ein sinnvolleres Beispiel ist etwa folgendes: Du willst beginnend von
einer Web-URL den Links auf der Web-Seite folgend eine komplette Website
absaugen, du willst Dich aber auf maximal 1000 Seiten beschränken.
Dann macht es Sinn den Durchlauf durch die Webseiten als breadth-first
(d.h. per Queue) statt als depth-first-Algorithmus (d.h. rekursiv)
zu implementieren, da es wohl wenig Sinn macht, dem ersten Link auf
der ersten Seite 999 Links weit hinterherzurennen und die anderen
unberücksichtigt zu lassen. Mit breath-first erhält man für alle
Links ungefähr dieselbe Linktiefe.
Ein anderer interessanter Nebeneffekt ist, daß es bei depth-first
passieren kann, daß man nachdem man eine Webseite besucht hat, beim
zweiten Auftauchen eines Links dies evtl. über einen kürzeren Pfad
passieren kann als beim ersten. Bei breath-first Durchlauf ist das
erste Auftreten eines Links zugleich auch das mit dem kürzesten
Pfad.
breath-first Bäume zu durchlaufen kann also durchaus ein Problem
sein, das in der Programmierpraxis auftritt.
Bis demnächst,
Walter Dörwald
More information about the Python-de
mailing list