AuK/Probabilistische Algorithmen SS09
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>Scheme</language>
===Einführung in proballistische Algorithmen===
[[Einführung in probalistische Algorithmen]]
[["Zufallszahlen"]]
===Algorithmen===
[[Las-Vegas-Algorithmen]]
====Monte-Carlo-Algorithmus Gruppe 2====
=====Multimengenvergleiche=====
<code>
</code>
<eval>()</eval>
=====Solovay/Strassen=====
<code hidden>
(define jacobi-symbol
(lambda (p q)
(cond ((zero? p) 0)
((= 1 p) 1)
((odd? p)
(if (odd? (quotient (* (- (modulo p 16)1)(- q 1)) 4))
(- (jacobi-symbol (modulo p q) p))
(jacobi-symbol (modulo q p) p)))
(else
(let ((qq (modulo q 16)))
(if (odd? (quotient (- (* qq qq) 1) 8))
(- (jacobi-symbol (quotient p 2) q))
(jacobi-symbol (quotient p 2) q)))))))
(define solovay-strassen-prim?
(lambda (n wdh)
(letrec
((helfer
(lambda (i)
(cond
((= i 0) #t)
((let ((a (zufall-a n)))
(= (modulo (jacobi-symbol a n) n) (potmod a (quotient (- n 1) 2) n)))
(helfer (- i 1)))
(else #f)))))
(if (= n 2)
#t
(helfer wdh)))))
(define stp
(lambda (n)
(do((i 3 (+ i 2)))
((> i n) (newline))
(if (solovay-strassen-prim? i 2)
(printf "~a, " i)))))
(define zufall-a
(lambda (n)
(let ((a (+ 2 (random (- n 2)))))
(if (> (gcd a n) 1) (zufall-a n)) a)))
(define potmod
(lambda (basis exponent mod)
(letrec
((helfer
(lambda (exponent resultat)
(if(= exponent 0)
resultat
(helfer (- exponent 1) (modulo (* resultat basis) mod))))))
(helfer exponent 1))))
</code>
<eval>(stp 50)</eval>
=====Buffons Nadel=====
===Ausblick===
====Genetische Programmierung====
[[Schwarmalgorithmen]]
===Aufgaben===
===1===
Implementieren Sie einen Generator für Pseudozufallszahlen nach der Kongruenzmethode. (Buch S. 124)
<math>z_{n}=(a*z_{n-1}+b)mod\ c</math>
mit
<math>z_0=4567\\a=9749\\b=0\\c=2^{18}=262144</math>
<code>
(define seed1 12347899 )
(define zf
;Kongruenzmethode in Scheme
(lambda ()
(let ((seed2 (modulo (+ (* 9749 seed1) 0) 262144)))
(set! seed1 seed2)
seed2)))
</code>
<eval>(zf)</eval>
(Um einen zufälligen Startwert anzunehemn gibt es zwar auch Sprachelemente in Scheme, jedoch funktionieren diese hier in der Wiki nicht.)
[[Aufgabenverteilung]]
===Quellen===
http://www.riskglossary.com/link/monte_carlo_method.htm
Oliver Lau "Faites vos jeux! - Zufallszahlen erzeugen, erkennen und anwenden" (c't 2009, Heft 2)
http://www.addison-wesley.de/Service/Krueger/kap12006.htm