wahrscheinlichkeit einer zahl erhöhen

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
langeweile
Gesperrt
Beiträge: 234
Registriert: 03.12.2006 14:48
Kontaktdaten:

wahrscheinlichkeit einer zahl erhöhen

Beitrag 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?
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag 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
Kein Support per PN!
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods
Benutzeravatar
StarWolf3000
Mitglied
Beiträge: 1019
Registriert: 25.07.2005 10:20
Wohnort: Stolpen
Kontaktdaten:

Beitrag 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
MOD-Einbauhilfe und Installationen über ICQ, TeamSpeak 2/3 und TeamViewer. Support nur im Forum, eingeschränkt per TeamViewer, aber nicht mehr per PN! • KB:knigge
langeweile
Gesperrt
Beiträge: 234
Registriert: 03.12.2006 14:48
Kontaktdaten:

Beitrag 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?
Benutzeravatar
andreasOymann
Ehemaliges Teammitglied
Beiträge: 2392
Registriert: 10.06.2003 16:29
Wohnort: Hamminkeln
Kontaktdaten:

Beitrag 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.
Kein Support per PN / Mail / ICQ / MSN ! Dafür gibt´s dieses Forum...
langeweile
Gesperrt
Beiträge: 234
Registriert: 03.12.2006 14:48
Kontaktdaten:

Beitrag 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
Xwitz
Mitglied
Beiträge: 1104
Registriert: 21.06.2005 21:41

Beitrag 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:
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag 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
Kein Support per PN!
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods
Xwitz
Mitglied
Beiträge: 1104
Registriert: 21.06.2005 21:41

Beitrag 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
Antworten

Zurück zu „Coding & Technik“