Autor Tema: Adivinar un numero

0 Usuarios y 1 Visitante están viendo este tema.

21 Enero, 2008, 08:18 pm
Leído 1704 veces

lonrot

  • $$\Large \color{#5372a0}\pi\,\pi$$
  • Mensajes: 63
  • Karma: +0/-0
Hola:

Tengo el siguiente problema, una persona escoge al azar una secuencia del 1 al 5 incluidos el 1 y el 5, cual seria la mejor forma de adivinar esa secuencia si la única pregunta que puedo hacer es si un numero esta antes que el otro. La forma mas obvia seria decir todas las formas posibles (5!) pero esa no es la mejor manera, alguna idea??

Gracias

21 Enero, 2008, 09:02 pm
Respuesta #1

León

  • Lathi
  • Mensajes: 903
  • Karma: +0/-0
  • Sexo: Masculino
Hola lonrot.

Encontrar la *mejor* manera, por ahí es un problema difícil. Sobre todo, no está bien definido (¿estás buscando la manera de asegurarte hacer la menor cantidad de preguntas en el peor caso o aquella que en promedio usa menos preguntas?).

Una buena manera de hacerlo, igual, es ir ubicando los números de a uno, empezando las comparaciones por el centro de la cadena.

Pensé en escribirte un algoritmo en pseudocódigo pero es demasiado trabajo y se va a entender menos que un ejemplo:

La otra persona eligió "42315", nosotros no lo sabemos. (Uso de ahora en mas el símbolo ">" para "está después de")

Código: [Seleccionar]
Preguntamos ¿2>1? No. Anotamos "21"
Preguntamos ¿3>1? No.
Preguntamos ¿3>2? Sí. Anotamos "231"  //Esa es la posición relativa de esos tres números.
Preguntamos ¿4>3? No.                 //Empezamos preguntando por el centro de "231"
                                      // (para que en el peor caso tengamos que preguntar menos)
Preguntamos ¿4>2? No. Anotamos "4231"
Preguntamos ¿5>3? Sí.                 //"4231" no tiene un número en el centro (como pasaba con"21")
                                      // asi que elegimos uno de los dos lugares vecinos al centro de la lista.
Preguntamos ¿5>1? Sí. Anotamos "42315" y terminamos.

Fíjate que en el paso n haces como máximo Parte_entera_de(n/2) comparaciones.

Así que como máximo haces 1+2+2+3+3=118 preguntas (y el peor caso se alcanza cuando tratas de adivinar "54321"). [corregí la cuenta en esta línea. Gracias manco]

22 Enero, 2008, 05:02 am
Respuesta #2

lonrot

  • $$\Large \color{#5372a0}\pi\,\pi$$
  • Mensajes: 63
  • Karma: +0/-0
Gracias, esta manera me resulta mejor que con pseudocódigo definitivamente, muchísimo mas legible.

22 Enero, 2008, 12:02 pm
Respuesta #3

Luis Fuentes

  • el_manco
  • Administrador
  • Mensajes: 56,056
  • País: es
  • Karma: +0/-0
Hola

 Con el razonamiento de León.. ¿no es 1+2+2+3=8 intentos máximo?.

Saludos.