Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Exponentialfunktion Warscheinlichkeit (https://www.delphipraxis.net/176387-exponentialfunktion-warscheinlichkeit.html)

Jonas Shinaniganz 1. Sep 2013 19:23

Exponentialfunktion Warscheinlichkeit
 
Hi Forum, ich habe ein bisschen "rummprogrammiert" ;) und habe grade ein kleines Problem.

In einer Funktion findet exponentielles Wachstum statt, soll heißen:

Eine Funktion ruft sich selbst 9 mal Rekursiv auf.
Mit jedem Aufruf ist die Warscheinlichkeit 50%, dass der rekursive Aufruf auch tatsächlich ausgeführt wird.
Jeder geglückte Aufruf hat wieder 9 Aufruf-Versuche zur Folge, von denen dann ja logischerweise ca 9 * 4,5 = 40,5 klappen.
Dies geht immer so weiter. 40,5 * 4,5 ...

Ich will, dass das Wachstum aber langsam zurück geht, also keine konstanten 50%. Der Wert soll immer unwarscheinlich (kleiner) werden je tiefer die Rekursionsstufe ist.

Wie genau heißt die Mathematik, welche ich für sowas brauche?

Viele Gruße!

Furtbichler 1. Sep 2013 19:56

AW: Exponentialfunktion Warscheinlichkeit
 
Wie genau soll die Wahrscheinlichkeit abnehmen? 50,30,20%? Folgender Ansatz ist anpassbar:

Delphi-Quellcode:
Const
  propability : Array [0..8] if double = (1,2,4,8,16,32,64,128,256,-1)

procedure RecursiveCall (level : Integer);
var
  i : Integer;

Begin
  if propability[level]<0 then exit;
  for i:=0 to 8 do
    if random(propability[level])=0 then
      RecursiveCall(level+1);
end;
// Aufruf
RecursiveCall(0);
Beim ersten Aufruf ist die Wahrscheinlichkeit 50%, danach 25% usw. Du kannst das Array anpassen, wie Du willst.

Jonas Shinaniganz 1. Sep 2013 19:59

AW: Exponentialfunktion Warscheinlichkeit
 
Grade läuft dieses TV Duell, danke schonmal :) Ich melde mich gleich

silver-moon-2000 1. Sep 2013 20:51

AW: Exponentialfunktion Warscheinlichkeit
 
Zitat:

Zitat von Furtbichler (Beitrag 1226817)
Delphi-Quellcode:
propability : Array [0..8] if double = (1,2,4,8,16,32,64,128,256,-1)
[...]
 if random(propability[level])=0 then
Beim ersten Aufruf ist die Wahrscheinlichkeit 50%, danach 25% usw. Du kannst das Array anpassen, wie Du willst.

Entschuldige, wenn ich so blöd frage, aber ist im zweiten Durchlauf nach Deinem Array die Wahrscheinlichkeit nicht 50%, anstatt, wie Du sagtest 25% und im ersten Durchlauf wäre die Wahrscheinlichkeit doch 100%?

Delphi-Quellcode:
y := Random(x)
liefert doch Zahlen im Bereich 0 <= y < x

Müsste das Array nicht so lauten, wenn sich die Wahrscheinlichkeit pro Level immer halbieren soll
Delphi-Quellcode:
propability : Array [0..8] if double = (2,5,9,17,33,65,129,257,-1)

Jonas Shinaniganz 1. Sep 2013 22:30

AW: Exponentialfunktion Warscheinlichkeit
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hmmm das trifft es irgendwie nicht so ganz:

Hab es mal in Form von Rauten, welche in sich selbst gezeichnet werden, veranschaulicht:
- Er bricht ab der 4ten Rekursionstiefe ab
- Bis dahin immer 50% Chance auf Aufruf

soruce:
Anhang 39823
exe:
Anhang 39824

Was ich beschreiben möchte, ist ein irgendwie gearteter Zerfallsprozess.. So wie er auch in der Natur vorkommt.

Furtbichler 2. Sep 2013 07:11

AW: Exponentialfunktion Warscheinlichkeit
 
Zitat:

Zitat von silver-moon-2000 (Beitrag 1226820)
Entschuldige, wenn ich so blöd frage, aber ist im zweiten Durchlauf nach Deinem Array die Wahrscheinlichkeit nicht 50%, anstatt, wie Du sagtest 25% und im ersten Durchlauf wäre die Wahrscheinlichkeit doch 100%?

Natürlich. Es war spät... Aber das..
Zitat:

Zitat von silver-moon-2000 (Beitrag 1226820)
Müsste das Array nicht so lauten, wenn sich die Wahrscheinlichkeit pro Level immer halbieren soll
Delphi-Quellcode:
propability : Array [0..8] if double = (2,5,9,17,33,65,129,257,-1)

Stimmt nicht, denn im Level #1 würdest Du Zufallszahlen von 0..4 erstellen, was 20% ergibt, danach von 0..8, was.. äh. 100/9 % entspricht...
Richtig wäre, alle Einträge im propability-Array um eine Stelle nach links zu verschieben.

Zitat:

Zitat von Jonas Shinaniganz (Beitrag 1226830)
Hmmm das trifft es irgendwie nicht so ganz:

Ich glaube schon, denn Du kannst die Wahrscheinlichkeit für die einzelnen Rekursionsebenen ja konfigurieren...
Zitat:

Zitat von Jonas Shinaniganz (Beitrag 1226830)
- Er bricht ab der 4ten Rekursionstiefe ab
- Bis dahin immer 50% Chance auf Aufruf

Entspricht zwar nicht deinen Eingangspost, aber egal. Das Array ist dann eben:
Delphi-Quellcode:
propability : Array [0..4] if double = (2,2,2,2,-1)

silver-moon-2000 2. Sep 2013 09:12

AW: Exponentialfunktion Warscheinlichkeit
 
Zitat:

Zitat von Furtbichler (Beitrag 1226837)
Stimmt nicht, denn im Level #1 würdest Du Zufallszahlen von 0..4 erstellen, was 20% ergibt, danach von 0..8, was.. äh. 100/9 % entspricht...

Whoops, wie schaffe ich es immer und immer wieder, einen kapitalen Fehler in meine Posts zu hauen? Da gibt es nur eine Ausrede:
Zitat:

Zitat von Furtbichler (Beitrag 1226837)
Natürlich. Es war spät...



Alle Zeitangaben in WEZ +1. Es ist jetzt 12:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz