scapulac
Messages postés15Date d'inscriptionmercredi 11 juin 2003StatutMembreDernière intervention14 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é.
scapulac
Messages postés15Date d'inscriptionmercredi 11 juin 2003StatutMembreDernière intervention14 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.
cs_Dobel
Messages postés333Date d'inscriptiondimanche 25 mai 2003StatutMembreDernière intervention23 novembre 20091 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;
}
scapulac
Messages postés15Date d'inscriptionmercredi 11 juin 2003StatutMembreDernière intervention14 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);
}