AuK/Greedy-Algorithmen SS09
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
==Einführung==
lalala
==Bruchteilrucksack-Problem==
Greedy
<language>Scheme</language>
==Aufbau==
<code>
(define greedy
(lambda (vorgabewert) ; z.B.: Kapazitaet der Rucksacks
(let
((kandidatenliste ‘(……))
(loesung? (lambda (ls) … ))
(okay? (lambda (ls) … ))
(naechster (lambda (ls) … ))
(modify+ (lambda (x ls) … ))
(modify- (lambda (x ls) … ))
(ziel (lambda (ls) … ))
(letrec
((helfer
(lambda (kandidaten resultat)
(cond
((loesung? resultat)(ziel resultat))
((and (null? kandidaten)(not (loesung? resultat)))
(error ‘greedy „Es gibt keine Loesung.”))
(else
(let* ((neuer-kandidat (naechster kandidaten))
(neues-resultat (cons neuer-kandidat resultat)))
(if (okay? neues-resultat)
(helfer (modify+ neuer-kandidat kandidaten) neues-resultat)
(helfer (modify- neuer-kandidat kandidaten) resultat))))))))
(helfer kandidatenliste ‘())))))
</code>
==Anwendbarkeit==
Greedy
<language>Scheme</language>
<language>Scheme</language>
==Beispiel (Geldwechsel)==
Greedy
<code>
(define geldwechsel
(lambda (restbetrag)
(let ((kandidatenliste '(200 100 50 20 10 5 2 1))
(loesung? (lambda(ls)(= restbetrag (apply + ls))))
(okay? (lambda (ls) (<=(apply + ls) restbetrag)))
(naechster car)
(madify+ (lambda (x ls) ls))
(modify- (lambda (x ls) delete x ls)))
(ziel (lambda(ls) (cons (reverse ls) (list (length ls))))))
(letrec
((helfer
(lambda (kandidaten resultat)
(cond
((loesung? resultat)(ziel resultat))
((and (null? kandidaten)(not (loesung? resultat)))
(error 'greedy "Es gibt keine Loesung"))
(else
(let* ((neuer-kandidat (naechster kandidaten)
(neues-resultat (cons neuer-kandidat resultat)))
(if (okay? neues-resultat)
(helfer
(modify+ neuer-kandidat kandidaten)
neues-resultat)
(helfer
(modify- neuer-kandidat kandidaten)
neues-resultat))))))))
(helfer kandidatenliste '())))))
</code>
<eval>
(geldwechsel 1293)
</eval>
==Verschiedene Greedy-Algorithmen==
Greedy
===Dijkstra===
.
===Kruskal===
.
==Übung==