Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Theoretische Informatik » Terminierung probabilistischer Algorithmus » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Terminierung probabilistischer Algorithmus
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Backwardsman
Grünschnabel


Dabei seit: 18.12.2006
Beiträge: 1

Terminierung probabilistischer Algorithmus Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

wie kann ich denn bei einem probabilistichen/randomisierten algrorithmus (wo ist da denn genau der unterschied) sagen/argumentieren/beweisen, dass er terminiert

mein algo. im pseudocode:
code:
1:
2:
3:
4:
5:
6:
n = 1
while(true){
    if (getRandom() <= p) return n;
    else n++;
}

dabei beträgt die wahrscheinlichkeit p, dass das aktuelle n akteptiert wird:
0 < p < 0.5 (fest für alle n)

naja, irgendwie ist es schon offensichtich, p ist größer null also wird schon irgendwann mal ein n akzeptiert werden, aber wie kann ich das denn formal begründen!?

danke!
18.12.2006 15:16 Backwardsman ist offline E-Mail an Backwardsman senden Beiträge von Backwardsman suchen Nehmen Sie Backwardsman in Ihre Freundesliste auf
ed209
Routinier


Dabei seit: 07.09.2006
Beiträge: 324

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Nach meiner Ansicht terminiert dieser Algorithmus nicht zwangsläufig, da es eine Folge von Eingaben von Zufallszahlen (0,0,0,0,0.....) gibt, bei der die Abbruchbedingung nicht erfüllt wird.

Das ist aber bald schon eine philosophische Frage, weil man argumentieren könnte daß die Wahrscheinlichkeit von n=x mit x gegen Unendlich gegen 0 geht.

Effektiv ist die Größe von n eh durch den Variablentyp beschränkt, also kannst du mit einer zusätzlichen Abbruchbedingung nicht viel verkehrt machen.

Wenn es dir um eine geometrische verteilte Zufallsvariable geht, dann gibt es auch bessere Algorithmen dafür, die das ganze in konstanter Zeit berechnen, was bei grossen p sicherlich einen Zeitgewinn bedeutet.

Gruß,
ED209

while (true) halte ich übrigens sogar in c für schlechten Stil smile
18.12.2006 17:05 ed209 ist offline E-Mail an ed209 senden Beiträge von ed209 suchen Nehmen Sie ed209 in Ihre Freundesliste auf
abraxas abraxas ist männlich
Grünschnabel


Dabei seit: 14.09.2006
Beiträge: 9
Herkunft: D

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Es gibt Stellen, an denen man eine nicht terminierende while-Schlaufe braucht, aber das ist hier sicherlich nicht der Fall (und while (true) ist sicher hässlich Augenzwinkern )

Warum addierst Du nicht einfach eine Zufallszahl zu n und gibst es dann zurück?

Diese Art von Inkrementierung einer Variable mit einer zufällig ausgerechneten boolschen Variable (darauf läuft das hier hinaus, weil Du den Zahlenwert nicht direkt benützt) bringt nur in solchen Kontexten was:

Denk an eine Linked List (ich weiß leider nicht, wie das auf deutsch heisst. Peinlich für den deutschboardler... ich weiß) in der Du eine bestimmte Menge an irgendwas gleichmässig verteilen willst... sagen wir eine Liste von Reisschalen, die alle zufällig viel Reis beinhalten, aber Du hast nur eine bestimme Gesamtmenge an Reis zur Verfügung.

Und auch da ist while (true) hässlich...
Hat das einen bestimmten Hintergrund, dass Du das so schreibst?

Grüße, abraxas

PS: die formale Begründung, dass das, was Du da hast, terminiert, gibt es mEn nicht. Denn solange der Zufall eine Rolle spielt, ist nichts zu beweisen. Es kann immernoch der böse Zufallsgott kommen, und Dir unendlich viele Nullen an den Kopf werfen.

__________________
Never trust an operating system you don't have sources for.
-- Unknown source
18.12.2006 18:32 abraxas ist offline E-Mail an abraxas senden Beiträge von abraxas suchen Nehmen Sie abraxas in Ihre Freundesliste auf Fügen Sie abraxas in Ihre Kontaktliste ein
ed209
Routinier


Dabei seit: 07.09.2006
Beiträge: 324

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Zitat:
Original von abraxas
Warum addierst Du nicht einfach eine Zufallszahl zu n und gibst es dann zurück?


Weil da eine andere Verteilung bei rauskommt. getRandom() soll vermutlich bei jedem Aufruf eine gleichverteilte Zufallszahl zwischen 0 und 1 ausspucken. getRandom() <= p ist ein Bernoulli-Experiment und die Schleife berechnet damit eine geometrisch verteilte Zufallsvariable.

Aber es gibt bessere Methoden das zu machen, bei Bedarf such ich mal genau raus wie.

Gruß,
ED

PS: Linked List nennt man auch verkettete List in Deutschland. Aber ich bin selbst kein großer Ventilator von deutschen Übersetzungen englischer Begriffe smile
18.12.2006 23:09 ed209 ist offline E-Mail an ed209 senden Beiträge von ed209 suchen Nehmen Sie ed209 in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Theoretische Informatik » Terminierung probabilistischer Algorithmus