Fonction random pipée (rien de cochon)

scapulac Messages postés 15 Date d'inscription mercredi 11 juin 2003 Statut Membre Dernière intervention 14 septembre 2003 - 11 sept. 2003 à 14:35
scapulac Messages postés 15 Date d'inscription mercredi 11 juin 2003 Statut Membre Dernière intervention 14 septembre 2003 - 14 sept. 2003 à 18:21
Salut tout le monde.

Dragon est dans la place ?

Bon voila mon probleme du jour.
J'ai une fonction random pipée. Elle me sort un VRAI avec une probabilité a et un Faux avec une probabilité 1-a.

Je ne connais pas a.

Il faux rien qu'en utilisant cette fonction arriver a faire une autre fonction qui me sorte True ou False avec une probabilité 1/2.

C'est purement theorique mais c'est ma question theorique du jour.

A+

9 réponses

cs_dragon Messages postés 2336 Date d'inscription samedi 14 juillet 2001 Statut Membre Dernière intervention 5 mai 2009 6
11 sept. 2003 à 17:46
???

au lieu de recevoir true ou false, tu veut recevoir -.5 ou .5 ???
0
scapulac Messages postés 15 Date d'inscription mercredi 11 juin 2003 Statut Membre Dernière intervention 14 septembre 2003
12 sept. 2003 à 08:51
Salut,

C'est pas exactement cela.

J'ai une fonction truquée qui me retourne soit vrai soit faux mais pas avec une probabilité égale. Par exemple elle me dira deux fois plus de TRUE que de FALSE.

Le but est de trouvé une fonction n'utilisant que la fonction truquée qui renvoie TRUE ou FALSE avec une probalbilité egale. 50 % de TRUE 50 % de fALSE.

Une précision je ne sais pas a priori qu'elle est le pourcentage de TRUE renvoyé par la fonction truqué.

Voila j'espere avoir été plus claire.

a+
0
cs_dragon Messages postés 2336 Date d'inscription samedi 14 juillet 2001 Statut Membre Dernière intervention 5 mai 2009 6
12 sept. 2003 à 15:07
ah ok
randomize
if rnd > 0.5 then
true
else
false
end if
0
cs_dragon Messages postés 2336 Date d'inscription samedi 14 juillet 2001 Statut Membre Dernière intervention 5 mai 2009 6
12 sept. 2003 à 15:08
oups en java, c'est le même principle, sauf la structure sera différente
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
scapulac Messages postés 15 Date d'inscription mercredi 11 juin 2003 Statut Membre Dernière intervention 14 septembre 2003
12 sept. 2003 à 15:40
Lapsus qui montre que tu es un programmeur echapé du VB ? ;-)

J'explique vraiment trop mal.

Bien sur je pourrais utiliser les fonctions implentées dans Java. Mais mon probleme est plutot une enigme. Je n'ai pas le droit d'utiliser de fonction Random, Rnd ou autre implenté par le language. Je dois me limiter a cette fonction truquée.

En gros je n'ai le droit d'utiliser qu'une fonction Alea comme cela :

public boolean function Alea() {
randomize
if (rnd > a) return True;
return false;
}

Bien sur a est une valeur entre 0 et 1. mais je precise que je ne suis pas sensé la connaitre.

Le but est toujours de faire une fonction Pile-Face qui renverrait True 1 fois sur 2 et false le reste du temps.

Je cherche toujours...

A+
0
cs_Dobel Messages postés 333 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 23 novembre 2009 1
13 sept. 2003 à 13:09
ok je crois que j'ai pigé ton truc !!

en pratique : ce qu'il faut faire :

tu fais un bon nombre de tirrages de ta fonction randPipo() que tu places dans une liste
int n = 500000;
Vector liste = new Vector(n);
for (int i=0; i<n; i++) {
liste.add(new Double(randPipo()));
}
tu tris la liste
Collections.sort(liste);

tu chope le double au milieu de la liste
a = ((Double) liste.elementAt(liste.size()/2)).doubleValue();

la nouvelle fonction rand est (avec a comme argument) :

public boolean pipoCorrige(double p) {
double rand = randPipo();
if (rand >=p) return true;
else return false;
}

ca devrait marcher
enfin je crois... :big)

DOBELIOU
0
scapulac Messages postés 15 Date d'inscription mercredi 11 juin 2003 Statut Membre Dernière intervention 14 septembre 2003
13 sept. 2003 à 18:36
Salut et merci de ta reponse.

Mais si j'ai bien compris ca ne fonctionnerais pas.

Ma fonction RandPipo (que je suis toujours obligé d'utiliser) renvoie un boolean et pas un double. Donc la liste "liste" serait remplit de booleans convertient en doubles (-1 et de 0).

la valeur a qui represente le milieu de la liste prendrait elle aussi la valeur -1 et 0; et ca poserait beaucoup de problèmes a la fonction suivante.

Néanmoins tu viens de m'inspirer une idée. Si je fais n tirage (avec n assez grand 1000) la probabilité de faire Face un nombre paire de fois doit etre approximativement égale a la probabilité de faire Face un nombre impair de fois.

Je propose donc une fonction comme celle la

sub boolean AleaCorrigé() {
boolean Res = true
for (int t=0; t<1000; t++) {
if (aleaPipo()) Res = not Res;
};
return(res);
}

Je testerais cela Lundi matin au boulot !!! ;-)
0
cs_Dobel Messages postés 333 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 23 novembre 2009 1
13 sept. 2003 à 21:01
je m'y remet ce soir
désolé pour le truc foireux

tu peux pas utiliser une vrai randomPipo ?-) :-)
ce srais un poil plus simple

DOBELIOU
0
scapulac Messages postés 15 Date d'inscription mercredi 11 juin 2003 Statut Membre Dernière intervention 14 septembre 2003
14 sept. 2003 à 18:21
Mon ordi ne fonctionne pas je ne peux donc pas tester la solution que j'ai proposée hier. Mais ca doit marcher (theoriquement)

Tu lances 100 fois la piece. tu compte le nombre de faces
s'il est pair tu dis que le resultat est faces sinon tu dis que le resultats est true.

En gros

function boolean Alea() {
int r=0;
for (int t= 0; t<100; t++) {
if (AleaPipo()) r= not r;
}
return (r);
}
0
Rejoignez-nous