Probabilistische Algorithmen SS09
Inhaltsverzeichnis |
Einführung in proballistische Algorithmen
Einführung in probalistische Algorithmen
Algorithmen
Monte-Carlo-Algorithmus Gruppe 2
Ein Monte-Carlo-Algorithmus ist ein Algorithmus welcher immer ein Ergebnis liefert, allerdings mit einer festlegbaren Wahrscheinlichkeit ein fehlerhaftes Resultat zurückliefert. Mithilfe von Monte-Carlo-Algorithmen lassen sich Probleme lösen die sonst nur schwer bis unlösbar sind.
Multimengenvergleiche
Wöllte man die Multimengen M_1=\{1,2,2,3,4,5\} und M_2=\{5,4,2,3,2,1\} auf Äquivalenz überprüfen müsste man die beiden Multimengen ordnen und dann auf Äquivalenz prüfen. Dies kostet im Mittel \mathcal{O}(n log n), besser wäre allerdings \Theta(n), dies vermag ein propabilistischer Algorithmus zu erreichen. Es wird verabredet das jeder Multimenge M_m=\{x_1,x_2,...,x_n\} ein Polynom p_{M_m} zugeordnet wird. Dieses Polynom wird nach folgendem Muster gebildet.\\
p_{M_m}(x)=(x-x_1)(x-x_2)...(x-x_n)Nun werden folgende Regeln verabredet:\\ \begin{enumerate}
\item M_1\equiv M_2, wenn p_{M_1}(x)\ =\ p_{M_2}(x) für \textit{alle} ganzen Zahlen x zutrifft. \item M_1\not\equiv M_2, wenn in 1. beschriebenes Verfahren für mindestens ein x fehlschlägt.
\end{enumerate} Was bedeutet das für uns. Nunja, sobald wir auf ein x für welches die Funktionswerte der beiden Polynome unterschiedlich sind so ist ziemlich sicher das die Multimengen unterschiedlich sind. Um die Wahrscheinlichkeit zu erhöhen wird der Test für zufällige x wiederholt. Konkret schaut das dann wie folgt aus.\\ Wir haben die 3 Multimengen \textbf{m1 ,m2 ,m3} zur Verfügung. m2 ist die Spiegelung zu m1, m3 ist eine gänzlich andere Multimenge Die Hilfsprozedur \textbf{poly} liefer den Polynomwert der Multimengen für einen gegebenen Wert.
<eval>()</eval>
Solovay/Strassen
<eval>(stp 50)</eval>
Buffons Nadel
Ausblick
Genetische Programmierung
Aufgaben
1
Implementieren Sie einen Generator für Pseudozufallszahlen nach der Kongruenzmethode. (Buch S. 124)
z_{n}=(a*z_{n-1}+b)mod\ cmit
z_0=4567\\a=9749\\b=0\\c=2^{18}=262144<eval>(zf)</eval>
(Um einen zufälligen Startwert anzunehemn gibt es zwar auch Sprachelemente in Scheme, jedoch funktionieren diese hier in der Wiki nicht.)
2
Setzen Sie sich an einem schönen Tag ins Freie, und beobachten Sie Ameisen bei der Futtersuche. Welche Beziehungen zu dem Ameisenalgorithmus können Sie erkennen? Welche Beispiele aus der Natur können noch einen Anreiz darstellen, sie als Vorbild für einen Algorithmus zu nutzen?
3
Entwerfen sie einen Quicksort-Algorithmus, welcher sein Pivot-Element zufällig wählt. Vergleichen sie die effizienz mit der Quicksort-Variante, welche immer das erste Element als Pivot-Element nutzt.
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
Schickinger, Steger - Diskrete Strunkturen - Band 2 - Wahrscheinlichkeitstheorie und Statistik
Juraj Hromkovič - Algorithmics for Hard Problems
Juraj Hromkovič - Randomisierte Algorithmen
http://www.m-boehmer.de/pdf/Schwarmintelligenz_Artikel.pdf
Jörg Rothe - Komplexitätstheorie und Kryptologie