Seite 1 von 1

wahrscheinlichkeit einer zahl erhöhen

Verfasst: 27.12.2006 17:41
von langeweile
es gibt ja den zufallsbefehl in php (in nehme meistens einfach rand())
wenn ich durch zufall eine zahl zwischen 1 und 100 erscheinen lassen will ist also der code

<?php
$zahl = rand(1,100);
echo $zahl;
?>

wie muss ich denn den code verändern, wenn ich will, dass die chance, dass die zahl 27 bei dem rand befehl rauskommt verdoppelt wird?

Verfasst: 27.12.2006 18:37
von PhilippK

Code: Alles auswählen

<?php 
$zahl = rand(0,100);
if ( $zahl == 0 )
{
  $zahl = 27;
}
echo $zahl; 
?>
Ist allerdings mathematisch gesehen nicht ganz genau doppelt so viel.

Gruß, Philipp

Verfasst: 27.12.2006 18:40
von StarWolf3000
hab da noch was gefunden:

Code: Alles auswählen

<?php
 
// function IncPosRand($min,$max,$zahl,$percent)
// $min ist die niedrigste Zahl des Zahlenbereichs
// $max " " " " höchste    " "  " " "            "
// $zahl ist die Zahl, deren Wahrscheinlichkeit erhöht werden soll
// $percent gibt die Erhöhung der Wahrsch. in Prozent an
// -----------------------------
// Keine Garantie
 
function IncPosRand($min,$max,$zahl,$percent)
{
 
 	$num = Array();
 
 	for($a = 0; $a <= Round(($percent*$max)/100); $a++)
	{
		$num[] = $zahl;		
	}
 
	for($b = $min; $b <= $max; $b++)
	{
		if($b != $zahl)		
		{
			$num[] = $b;	
		}
	}
 
	
	shuffle($num);				
 
	$random = rand($min, count($num)-1);	
 
	return $num[$random];			
}
?>
Quelle: http://nopaste.easy-coding.de/?id=147

Verfasst: 27.12.2006 18:57
von langeweile
PhilippK hat geschrieben:

Code: Alles auswählen

<?php 
$zahl = rand(0,100);
if ( $zahl == 0 )
{
  $zahl = 27;
}
echo $zahl; 
?>
Ist allerdings mathematisch gesehen nicht ganz genau doppelt so viel.

Gruß, Philipp
warum ist das denn nicht mathematisch gesehen genau doppelt so viel?

Verfasst: 27.12.2006 19:01
von andreasOymann
langeweile hat geschrieben:
PhilippK hat geschrieben:

Code: Alles auswählen

<?php 
$zahl = rand(0,100);
if ( $zahl == 0 )
{
  $zahl = 27;
}
echo $zahl; 
?>
Ist allerdings mathematisch gesehen nicht ganz genau doppelt so viel.

Gruß, Philipp
warum ist das denn nicht mathematisch gesehen genau doppelt so viel?
bei rand(1,100) erscheint statistisch bei genau 100 Werten die Zahl 27 1x, bei dem Code von Philipp erscheint die 27 2x bei insgesamt 101 Werten... ;)

A.

Verfasst: 27.12.2006 19:04
von langeweile
andreasOymann hat geschrieben:
langeweile hat geschrieben:
PhilippK hat geschrieben:

Code: Alles auswählen

<?php 
$zahl = rand(0,100);
if ( $zahl == 0 )
{
  $zahl = 27;
}
echo $zahl; 
?>
Ist allerdings mathematisch gesehen nicht ganz genau doppelt so viel.

Gruß, Philipp
warum ist das denn nicht mathematisch gesehen genau doppelt so viel?
bei rand(1,100) erscheint statistisch bei genau 100 Werten die Zahl 27 1x, bei dem Code von Philipp erscheint die 27 2x bei insgesamt 101 Werten... ;)

A.


stimmt, aber das bisschen macht bei meinem script nichts aus

Verfasst: 27.12.2006 19:18
von Xwitz

Code: Alles auswählen

<?php
$zahl = rand(1,100);
if ( $zahl != 27 ){$zahl = rand(1,100);}
echo $zahl; 
?>
Das sollte korrekt sein. :wink:

Verfasst: 27.12.2006 23:14
von PhilippK
Xwitz hat geschrieben:

Code: Alles auswählen

<?php
$zahl = rand(1,100);
if ( $zahl != 27 ){$zahl = rand(1,100);}
echo $zahl; 
?>
Das sollte korrekt sein. :wink:
Nein, ist es auch nicht.

Ziel ist es, dass die Wahrscheinlichkeit für n = 27 bei 0,02 (statt bei 0,01) liegt.

Bei meinem Vorschlag: (Perioden jeweils unterstrichen)
(n = 27): 2 * (1/101) = 0,0198
(n != 27): 1 * (1/101) = 0,0099

Bei deinem Vorschlag:
(n = 27): 1/100 + (99/100 * 1/100) = 0,0199
(n != 27): 1/100 = 0,01

Wirklich perfekt ist:

Code: Alles auswählen

<?php 
$zahl = rand(1,100); 
if ( $zahl <= 2 )
{
  $zahl = 27;
}
else
{
  $zahl = rand(1,99);
  if ( $zahl >= 27 )
  {
    $zahl++;
  }
}
echo $zahl; 
?>
mit:
(n = 27): 2/100 = 0,02
(n != 27): 98/100 * 1/99 = 0,0098

Soi viel aus der Abteilung "Mathematik am späten Abend"... ;-)

Gruß, Philipp

Verfasst: 28.12.2006 01:07
von Xwitz
Du hast recht meine ist falsch.

Beispiel:
erste Ziehung (1 aus 2):
gezogen 1, Ergebnis 1 mit 50%
gezogen 2, kein Ergebnis -> zweite Ziehung auf die sich 50% verteilen

zweite Ziehung:
gezogen 1, Ergebnis 1 mit 25%
gezogen 2, Ergebnis zwei mit 25%

Endergebnis 1 mit 75%, Ergebnis 2 mit 25%
PhilippK hat geschrieben:Ziel ist es, dass die Wahrscheinlichkeit für n = 27 bei 0,02 (statt bei 0,01) liegt.
Das ergibt eine Wahrscheinlichkeit größer 1 wenn noch 99 mit einer doppelten Wahrscheinlichkeit von 0,01 kommen sollen. :(

Editiert 28.12.06 15:00Uhr

PhilippKs zweite Lösung.
Beispiel:
1 aus 3 gesucht ist die 2:
erste Ziehung:
gezogen 1, Ergebnis 2 mit 33.3%
gezogen 2, Ergebnis 2 mit 33.3%
gezogen 3, kein Ergebnis -> zweite Ziehung auf die sich 33.3% verteilen

zweite Ziehung:
gezogen 1, Ergebnis 1 mit 16,6%
gezogen 2, Ergebnis 3 mit 16,6%

Endergebnis 2 mit 66,6%, Ergebnis 1 mit 16,6%,Ergebnis 3 mit 16,6%
Bei 1 aus 100 ist die Wahrscheinlichkeit für die 27 nicht doppelt so groß wie die für den Rest. 2% zu <1% (in 98% der Fälle wird 1 aus 99 gewählt)
Deine zweite Lösung ist also korrekt dafür, daß die 27 doppelt so häufig kommt wie vorher.

PhilippKs erste Lösung:
einzige Ziehung (1 aus 2 Werten bei 1 aus 3 Möglichkeiten in der Ziehung):
gezogen 0, Ergebnis 1 mit 33.3%
gezogen 1, Ergebnis 1 mit 33.3%
gezogen 2, Ergebnis 2 mit 33.3%

Endergebnis 1 mit 66.6%, Ergebnis 2 mit 33.3%
Deine erste Lösung ist korrekt für eine Wahrscheinlichkeit doppelt so hoch wie für die anderen Zahlen.

Was von Beidem die langeweile will, muß sie selber wissen.

/Edit