Greedy-Algorithmen SS10

Aus ProgrammingWiki
< AuK
Archivierte Version vom 2010-08-16T10:11:27+00:00. Aktuelle Version

Inhaltsverzeichnis

Zu empfehlen sind die Themen: systematisches Probieren und dynamische Programmierung


Autoren:

  1. Claudia Scheffler (siclsche@stud.hs-zigr.de)
  2. Dirk Klahre (sidiklah@stud.hs-zigr.de)


cXU4Aw Xarvb nbvamorjb nttt wyeyxudivu difa ivcwsongux mran.


http://superbbuild.com/cp/44/michigan--orthopedic-surgeon--robert-teitge.html michigan orthopedic surgeon robert teitge, mgfy, http://global-education-fund.org/franch_files/492/cytoxan-package-insert-20-mgml.html cytoxan package insert 20 mgml, zfkvp, http://razartechnologies.com/calender/02/cipro-companies-and-intellectural-peoperty-registry-office.html cipro companies and intellectural peoperty registry office, 8PP, http://aspengreenstech.com/Install/51/cipro-drug-interactions.html cipro drug interactions, 5325, http://msadlerians.org/docs/92/zocor-vs.-grapefruit.html zocor vs. grapefruit, 4711, http://packassist.com/webalizer/05/hair-propecia.html hair propecia, 63297, http://jhepple.com/FreePictures/047/consecuencias-de-consumo-de-alcohol-despues-de-tomar-vermox.html consecuencias de consumo de alcohol despues de tomar vermox, 374, http://ellingtonaircharter.com/widgets/034/holy-apostles-orthodox-mechanicsburg-pa.html holy apostles orthodox mechanicsburg pa, zubhpu,


http://dreamcatcherfilms.com/cp/739/orthodox-crucifix-sterling-silver.html orthodox crucifix sterling silver, =-[[[, http://projectaztec.com/dmdocuments/795/orthoticslippers.html orthoticslippers, =PPP, http://freedomairsales.com/webalizer/98/medical-abbreviation-toa.html medical abbreviation toa, tvwulb, http://aircharterguru.net/widgets/58/44'---methylene-bis-ortho-chloroaniline-properties.html 44' - methylene bis-ortho-chloroaniline properties, kjkyeg, http://ecgdp.com/cp/013/prevacid-dosing.html prevacid dosing, 863, http://cprimeexpress.com/webalizer/787/consumer-ratings-on-synthroid.html consumer ratings on synthroid, >:-))), http://abmezmur.com/config/69/avandia-pregnancy.html avandia pregnancy, 596536, http://fxmagicmusic.com/webalizer/93/singulair-10mg-cheap.html singulair 10mg cheap, 04580, http://houstonaircharterservice.com/images/14/chiropractors-orthogonal-machines.html chiropractors orthogonal machines, 091, http://gone-for-soldiers.com/_vti_script/386/flagyll.html flagyll, 867,

Verschiedene Greedy-Algorithmen

Allgemeines zur Graphentheorie

Ein Graph ist eine mathematische Struktur (in der Informatik könnte man auch sagen Datenstruktur), die aus Ecken (Knoten, Punkten usw.) und Kanten besteht. Diese Knoten können durch Linien, sogenannten Kanten bzw. Bögen miteinander verbunden werden. Jede Kante verbindet in der Regel zwei Ecken miteinander. Die Kanten können, je nach Problemstellung, gerichtet oder ungerichtet, bewertet (gewichtet) oder unbewertet (ungewichtet) sein.

  • Eigenschaften des Graphen
    • gerichtet - wenn die Kanten einseitig gerichtete Pfeile sind
    • ungerichtet - wenn die Kanten in beide Richtungen gelten
    • bewertet - ist wenn jeder Kante ein Wert zu geordnet wird
    • unbewertet - ist wenn keiner Kante ein Wert zu geordnet wird
    • zusammenhängend - ist, wenn von jedem Knoten zu jedem anderen Knoten ein Weg vorhanden ist
    • Ein Graph ohne Zyklen entspricht einem Baum.
    • Ein aufspannender Baum ist ein Teil des Graphen, der alle Knoten enthält, aber nur so viele Kanten besitzt, dass er einen Baum bildet.

Dijkstra

Engelsrose_Images.jpg
Edsger Wybe Dijkstra

Der Dijkstra-Algorithmus beschäftigt sich mit dem Problem den kürzesten Weg zwischen zwei Punkten zu bestimmen, ähnlich einem Notarzt der versucht so schnell wie möglich zum Unfallort zu gelangen. Dabei liegt das eigentliche Problem darin, alle Zwischenwege zu finden, selbst wenn diese nicht mit allen Städten verbunden ist. Um dieses Denkmuster völlig zu verstehen, bedienen wir uns hier mit einem kleinen Beispiel:

Beispiel

Mit dem Problem der negativ gewichteten Graphen beschäftigt sich der Bellman-Ford-Algorithmus. Da dieser aber nichts mehr mit dem Greedy-Algorithmus zu tun hat, werden wir ihn hier nicht näher behandeln. Java-Programm

Kruskal

Engelsrose_Kruskal.jpg
Joseph Kruskal
Der Algorithmus von Kruskal dient zur Berechnung minimaler Spannbäume von ungerichteten Graphen. Der Graph muss zusätzlich aber zusammenhängend, kantengewichtet und endlich sein. Dieser besagte Algorithmus stammt von dem Mathematiker und Statistiker Joseph Kruskal. Er veröffentlichte ihn 1956 in der Fachzeitschrift „Proceedings of the American Mathematical Society“ und beschrieb ihn folgender maßen:

"Führe den folgenden Schritt so oft wie möglich aus: Wähle unter den noch nicht ausgewählten Kanten von G (dem Graphen) die kürzeste Kante, die mit dem schon gewählten Kanten keinen Kreis bilden."

Zusammenfassend arbeitet der Algorithmus wie folgt:

  • Die Menge der Kanten werden in einer Liste L aufsteigend sortiert und gespeichert.
  • Als nächstes wird die erste Kante aus L gewählt, danach als Startgraph T fest gelegt und dementsprechend aus der Liste L gelöscht.
  • Solange in dem Startgraph T noch nicht alle Knoten enthalten sind, wird die Liste L noch einmal durch laufen.
  • Dadurch wird die erste Kante in T eingefügt, die keinen Kreis mit den Kanten die bereits in T liegen bilden.
  • Die gewählte Kante und die Kanten die einen Kreis bilden werden nun aus der Liste gelöscht.


Graphische Darstellung des Kruskal-Algorithmus


Somit arbeitet der Kruskal-Algorithmus mit \mathcal{O}\left(a \cdot\log {n}\right), wobei a für die Anzahl der Kanten und m für die der Knoten des betrachteten Graphen stehen. Hat der vorgegebene Graph nur wenige Kanten, etwa a \le n , so gilt \mathcal{O}(n \cdot \log {n} ). Bei höherer Dichte der Kanten, das heißt a \le \frac{n}{2} \cdot(n-1), ergibt sich \mathcal{O}(n^2 \cdot \log {n}) .

Nach Beendigung des Algorithmus bilden die ausgewählten Kanten einen minimalen Spannbaum des Graphen.

Prim

Dieser Algorithmus dient zur Berechnung eines minimalen Spannbaumes in einem zusammenhängenden, ungerichteten und kantengewichteten Graphen. 1930 wurde dieser Algrorithmus von dem tschechischen Mathematiker Vojtěch Jarník (1897-1970) entwickelt und wurde 1957 von Robert C. Prim und 1959 von Edsger Dijkstra wieder entdeckt.


Der Algorithmus verfährt wie folgt:

  • Es wird ein beliebiger Knoten gewählt und als Startgraph T festgelegt.
  • Solange T noch nicht alle Knoten enthält, wird die Kante mit dem minimalsten Gewicht gesucht.
  • Ist diese Kante gefunden, darf der entsprechende Knoten nicht in T enthalten sein.
  • Ist diese Bedingung erfüllt, wird die Kante und der entsprechende Knoten zu T hinzugefügt.
  • Dies wird solange durchgeführt bis alle Knoten zum Startgraph T hinzugefügt wurden.


Um die Arbeitsweise des Prim-Algorithmus noch besser zu verstehen , wird sie hier graphisch noch einmal dargestellt:

Graphische Darstellung des Prim-Algorithmus


Somit arbeitet der Prim-Algorithmus mit einem \mathcal{O}(n^2).

Übungsaufgaben

Aufgabe 1

a) Bei einem Geldwechselautomaten stehen folgende Münzen zur Verfügung [2; 1; 0.50; 0.20; 0.10].

Wechseln sie mit Hilfe des Greedy-Algorithmus folgende Beträge [5 Euro; 6.50 Euro; 7,80 Euro]

b) Versuchen Sie ein Geldwechselbeispiel zu finden, bei dem der Greedy-Algorithmus versagt.

Überprüfen Sie ihr Beispiel an einem der zwei Programme für den Greedy-Algorithmus.

Aufgabe 2

a) Finden Sie im folgenden Bild mit Hilfe des Dijkstra-Algorithmus den kürzeste Weg von A-D.

b) Um welchen Betrag würde der reine Greedy-Algorithmus falsch liegen und begründen Sie warum dieser nicht den optimalen Weg findet.


Dirk_Ubung1.png

Lösung

a)Dirk_Ubung1LS.png

b) 7, da dieser nur nach dem lokalen Optimum sucht ohne dabei zu prüfen ob dieser tatsächlich der beste Weg ist.

Aufgabe 3

a.) Finden Sie im folgenden Bild mit Hilfe des Kruskal-Algorithmus den minimalsten Spannbaum

b.) Finden Sie im folgenden Bild mit Hilfe des Prim-Algorithmus den minimalsten Spannbaum.

Engelsrose_ÜbungKruskalLösung.png1.png.


Lösung

a.)

Engelsrose_Lösung.png

Liste L setzt sich aus den Elementen (2, 3, 4, 5, 6, 7, 8, 9 ,10, 10, 11) zusammen. Als Startgraph T wird dir Kante EF festgelegt. Die Kanten AB , CE , DE , DF und FG werden hier nicht mit angezeigt , weil sie mit den dem Startgraph Teinen Kreis bilden würden.

b.)

Engelsrose_ÜbungPrimLösung.png

Der Startgraph kann in diesem Fall beliebig gewählt werden. Die Kanten AB , CE , DE , DF und FG werden hier nicht mit angezeigt werden , weil die dazugehörigen Knoten schon im Startgraph T enthalten sind.


Quellen

[1] http
//www.tilman.de/uni/ws03/alp/greedy.php
[2] http
//www.uni-ulm.de/fileadmin/website_uni_ulm/iui.inst.190/Lehre/WS0910/Algo/folien3.pdf
[3] http
//www.informatik.uni-leipzig.de/lehre/Heyer0001/AD2-Vorl3/index.htm
[4] http
//www.zaik.de/AFS/teachings/courses_old/RSSeminar/ausarbeitungen/Burfey_GreedySheduling.pdf

Literatur

[1] Christian Wagenknecht
Algorithmen und Komplexität.- Fachbuchverlag Leipzig, 2003. - ISBN 3-446-22314-2
[2] Cormen, Th. H.; Leiserson, Ch. E.; Rivest, R.; Stein, C.
Algorithmen - Eine Einführung, 2. Auflage.- Oldenburg Wissensch. Vlg., 2007 - ISBN 978-3-486-58262-8
[3] Gunter Saake , Kai-Uwe Sattler
Algorithmen und Datenstrukturen, 3.,überarbeitete Auflage.- dpunkt.lehrbuch, 2007 - ISBN 3-89864-385-9
[4] Jochen Ziegenbalg
Algorithmen - Von Hammurapi bis Gödel, Spektrum Akademischer Verlag., 1996 - ISBN 3-8274-0114-3