Calculo de probabilidades

El otro día echando una timba de poker con mis amigos acabamos jugando a "las parejas", consistía en algo sencillo, tirabas 4 dados de seis caras y tenias que sacar una pareja simple, si no lo lograbas, sacabas trio, poker, o dobles parejas perdías. El último en pie ganaba un euro al resto.

Muy muy adictivo, nos tiramos horas jugando y al final nos jugamos mas dinero con los daditos que con el poker :-|

El tema es, que por muchas vueltas que le dimos no supimos sacar la probabilidad de que salga una pareaja simple en una tirada de 4 dados de seis caras.

Estoy seguro que hay alguna fórmula matemática que te diga la probabilidad pero no fuimos capaces, poco matemático entre nuestras filas me temo [+risas]

¿Alguien sabría aclararme el tema?

Factores:
- 4 dados.
- Dados de 6 caras.
- Hace falta sacar una pareja, si sacas dobles, trio o poker pierdes igual que si no sacaras ni pareja.

¿Que porcentaje hay de que salga pareja simple? Por nuestra partida diría que mas del 50%, pero ni idea.
Yo diría que es 1/6 (el segundo dado que coincida con el primero) * 5/6 (otro diferente) * 4/6 (otro diferente a los 2 anteriores) = 20/216=9,26% XD XD

Pero soy un manta así que no me fío ni yo. [+risas]
@kpik0 Si tu 9,26% es correcto lo que sucedió anteayer en la timba es tan improbable como el bigbang casi [+risas]

Tiene que ser mucho mayor... jugamos unas 100 rondas entre 5 personas y solo en 2 ocasiones se acabó en primera ronda (uno saca dobles, y el resto no), en ningún caso ninguno sacamos doble en una ronda, y la mayoría de partidas duraban al menos 4 o 5 rondas.

Si en efecto es un 9,26% flipo con la "suerte" que tuvimos todos.
Dando así otro palo de ciego se me ocurre que habría que multiplicar ese 9.26% por 3! (=6) ya que ese 9.26% es solo para que ocurra en el orden de que salga primero la pareja y dos distintos. Con lo que 55.56% bastante más lógico.
Según Wolfram Alpha, la probabilidad de sacar una pareja es de 0.625, excluyendo los trios, y cuartetos, pero no sé si excluye las dobles parejas...

http://www.wolframalpha.com/input/?i=4%20dice
Zamorate escribió:Según Wolfram Alpha, la probabilidad de sacar una pareja es de 0.625, excluyendo los trios, y cuartetos, pero no sé si excluye las dobles parejas...

http://www.wolframalpha.com/input/?i=4%20dice


Bajo pone que doble pareja es 0.069 , que se quitaría al 0.625 y seria 0.556 . ¿O me paso de listo? XD
kpik0 escribió:Yo diría que es 1/6 (el segundo dado que coincida con el primero) * 5/6 (otro diferente) * 4/6 (otro diferente a los 2 anteriores) = 20/216=9,26% XD XD

Pero soy un manta así que no me fío ni yo. [+risas]


No es correcto porque estás imponiendo que sea el primero el que coincida con el segundo, pero podrían ser el primero y el tercero, etc.

No estoy 100% seguro pero diría que es así:

Asumimos que los dados están ordenados (me parece más fácil así), hay 6^4 resultados diferentes.

Hay 6 parejas posibles (una por cada cara del dado), y estas se pueden posicionar en (2 sobre 4)=6 posiciones diferentes (1-2,1-3,1-4,2-3,2-4,3-4). Los otros dos dados tienen que ser diferentes al que ha salido de la pareja y diferentes entre ellos, es decir 5*4=20 posibilidades.

Por tanto, P=6*6*20/6^4=20/36=55.56%
@Zamorate Y dobles parejas ojo, tampoco te pueden salir dobles parejas, por tanto aún menor.

Algo se escapa en serio, tiene que ser mucho mayor.

Animarse y tirar unas cuantas veces 4 dados de 6 caras, ya veréis como no cuadran vuestros resultados con porcentajes tan bajos.

Ese 55,56% me cuadraría mas, pero sigo sin comprender la ecuación... :(

Edito:
"Hay 6 parejas posibles (una por cada cara del dado), y estas se pueden posicionar en (2 sobre 4)=6 posiciones diferentes (1-2,1-3,1-4,2-3,2-4,3-4). Los otros dos dados tienen que ser diferentes al que ha salido de la pareja y diferentes entre ellos, es decir 5*4=20 posibilidades.

Por tanto, P=6*6*20/6^4=20/36=55.56%"

Pues creo que Amano Jacu ha podido dar en el clavo...
A la mierda todo, simulación informática:

#include <iostream>

using namespace std;

bool esValido(int a,int b,int c,int d)
{
    int cnt = 0;

    if (a == b) cnt++;
    if (a == c) cnt++;
    if (a == d) cnt++;

    if (b == c) cnt++;
    if (b == d) cnt++;

    if (c == d) cnt++;

    return cnt == 1;
}

int main()
{
    int posibilidades = 0;

    for (int i = 0;i<6;i++)
    {
        for (int j = 0;j<6;j++)
        {
            for (int k = 0;k < 6;k++)
            {
                for (int l = 0;l < 6;l++)
                {
                    if (esValido(i,j,k,l)) posibilidades++;
                }
            }
        }
    }

    cout<<posibilidades<<"/"<<1296<<endl;
    cout<<endl;
    cout<<100*posibilidades / 1296.0 <<'%'<<endl; // 6^4 = 1296
}


Sale un 55,5556%.
Pues sí, si coincide con lo que dice wolfram y la simulación de @amchacon , será que es correcto [beer]
Pues parece que ese es el resultado correcto. En Wolfram Alpha no había visto que también salía la probabilidad de dobles parejas, por lo tanto:

P(pareja en 4 dados) = 0.625
P(dobles parejas en 4 dados) = 0.06944 (5/72)
P(exclusivamente pareja en 4 dados) = 0.625-5/72 = 0.5556 -> 55,56%

Otra forma en la que he llegado al resultado es la siguiente:

Sale una cara cualquiera (P=1), otra igual (P=1/6), otra diferente a esa (P=5/6) y otra diferente a las dos anteriores (P=4/6)
P = 1*1/6*5/6*4/6 = 0.0926

Si multiplicamos ese valor por 6 (número de caras? permutaciones? aquí es donde me pierdo ;)
P = 0.0926 * 6 = 0.5556
A todos por vuestros desinteresados cálculos:

Imagen
kpik0 escribió:Dando así otro palo de ciego se me ocurre que habría que multiplicar ese 9.26% por 3! (=6) ya que ese 9.26% es solo para que ocurra en el orden de que salga primero la pareja y dos distintos. Con lo que 55.56% bastante más lógico.


Exacto, es eso, es exactamente lo mismo que he hecho yo, sólo te faltaba multiplicarlo por 6, que es el número de subconjuntos de 2 elementos que podemos hacer con 4 unidades, (2 sobre 4)=4*3/2=6
cpardo escribió:@Zamorate Y dobles parejas ojo, tampoco te pueden salir dobles parejas, por tanto aún menor.

Algo se escapa en serio, tiene que ser mucho mayor. (...)


El valor de 0,625 que apuntaba Zamorate se corresponde con un 62.50%, que es de hecho mayor al valor correcto.
Montecarlo FTW

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define SIM 1000000
#define NDICES 4
#define NFACES 6

int pair = 0;
int toak = 0;
int poker = 0;
int experiments = 0;
int counter[NFACES];

void checkPairs(int* dice){
   int i, npairs;
   // Inicializamos contador
   for(i=0;i<NFACES;i++){
      counter[i] = 0;
   }
   // Contamos valores de cada dado
   for(i=0;i<NDICES;i++){
      counter[dice[i]]++;
   }
   
   // Comprobamos que no haya poker
   for(i=0;i<NFACES;i++){
      if(counter[i] == 4) {
         poker++;
         return;
      }
   }
   // Comprobamos que no haya trio
   for(i=0;i<NFACES;i++){
      if(counter[i] == 3){
         toak++;
         return;
      }
   }
   // Comprobamos que haya una sola pareja
   npairs = 0;
   for(i=0;i<NFACES;i++){
      if(counter[i] == 2){
         npairs++;
      }
   }
   if(npairs == 1){
      pair++;
      return;
   }
}

int main(void){
   int i,j;
   srand(time(NULL));
   int dice[NDICES];
   
   for(i=0;i<SIM;i++){
      for(j=0;j<NDICES;j++){
         dice[j] = rand()%NFACES;
      }
      experiments++;
      checkPairs(dice);
   }
   
   printf("Results:\n");
   printf("Experiments: %d\n",experiments);
   printf("Pairs:       %d (%f%%)\n",pair,100*(float)pair/(float)experiments);
   printf("Toak:        %d (%f%%)\n",toak,100*(float)toak/(float)experiments);
   printf("Poker:       %d (%f%%)\n",poker,100*(float)poker/(float)experiments);
   
   return 0;
}


Results:
Experiments: 1000000
Pairs: 555633 (55.563301%)
Toak: 92565 (9.256500%)
Poker: 4626 (0.462600%)
Aunque como refuerzo de una tesis pueden valer, los generadores pseudo-aleatorios no sirven como demostración.
Deschamps escribió:Aunque como refuerzo de una tesis pueden valer, los generadores pseudo-aleatorios no sirven como demostración.


Hombre, no sirve de demostración, pero la ley de los grandes números dice que tienen que dar lo mismo, de modo que si no lo hacen, o el cálculo o el algoritmo están mal hechos. Si los dos dan lo mismo, lo más probable es que ambos están bien.

Por si a alguien le interesa, he hecho la simulación el programa R que está más pensado para programación estadística, es el que uso yo:

https://www.r-project.org/

f<-function()
{x<-sample(1:6,4,replace=T)
y<-unique(x)
length(y)==3
}
sum(replicate(100000,f()))/100000


Me ha salido 0.55602 . Sample es una funcion que elige al azar 4 elementos del 1 al 6, con reemplazamiento. Unique quita los repetidos, que haya exactamente una pareja es lo mismo que decir que hay exactamente 3 diferentes. La función solamente da 0 o 1 según si se cumple que haya sólo una pareja o no, luego calculo la frecuencia relativa del evento simulándolo 100000 veces.
16 respuestas