Foros del Web » Programando para Internet » PHP »

crear este tipo de algoritmo en php

Estas en el tema de crear este tipo de algoritmo en php en el foro de PHP en Foros del Web. Hola, no encuentro la logica para seguir para crear este algorismo, trata de selecionar un numero del 000 al 100 de forma aleatoria pero que ...
  #1 (permalink)  
Antiguo 03/03/2015, 07:34
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 13 años, 3 meses
Puntos: 10
crear este tipo de algoritmo en php

Hola, no encuentro la logica para seguir para crear este algorismo, trata de selecionar un numero del 000 al 100 de forma aleatoria pero que no este en otra tabla, necestio que que puedan salir numeros como estos 000,001 hasta el 100, alguna idea ya que no encuentro la logica, saludos.
  #2 (permalink)  
Antiguo 03/03/2015, 08:33
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: crear este tipo de algoritmo en php

Es medio elemental...
Algo parecido a esto:
Cita:
1. MIENTRAS exito = FALSE
1.1. Generar numero aleatorio y almacenar
1.2. POR CADA NUMERO en la TABLA:
1.2.1. VERIFICAR si es igual al obtenido
1.2.2. Si es igual, exito = FALSE, SINO exito = TRUE
1.2.3. FIN POOR CADA NUMERO
1.3. FIN MIENTRAS
Este tipo de ejercicio simplemente tienes que escribirlo, deduciendo la lógica.
Es sólo un ejercicio mental.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 03/03/2015, 08:43
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 13 años, 3 meses
Puntos: 10
Respuesta: crear este tipo de algoritmo en php

Hola gnzsoloyo, una pregunta bueno primero gracias por tu ayuda, mientras obtengo el numero aleatorio por ejemplo con round(rand()*100) por ejemplo y luego compruebo que ese numero no esta en una tabla supongamos que me extrae 99 numero aleatorio tendria que comprobar 99 veces ese numero en la tabla, creo que mi replanteamiento no esta bien.

que soluciones tengo?saludos
  #4 (permalink)  
Antiguo 03/03/2015, 08:59
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: crear este tipo de algoritmo en php

Tu preguntaste por algoritmo, no por programación.
No es lo mismo.

Cuando hablas de algoritmia estás planteando cuál es la logica a cumplir, que está más allá de los lenguajes.

Pero cuando hablas de optimizar una busqueda programáticamente, estás preguntando por los recursos de cada lenguaje, y alli te diré que si la tabla está en la base, es una consulta a ella, mientras que si la tabla es parte de la página, necesitas otros recursos, y si la tabla es un array de PHP, entonces debes usar los métodos que existan en esa clase.

¿Se entiende?

No confundas lógica con implementación.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 03/03/2015, 09:03
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 13 años, 3 meses
Puntos: 10
Respuesta: crear este tipo de algoritmo en php

gnzsoloyo me referia que una vez creada la logica tendria ese problema de recursos en el servidor, creo que optare por guardar los numeros en una tabla, gracias por tu ayuda, saludos.
  #6 (permalink)  
Antiguo 03/03/2015, 09:23
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: crear este tipo de algoritmo en php

Genera un array con todos los elementos posibles.
Elmina todos los que están en la tabla.
Coge uno al azar de los restantes.
  #7 (permalink)  
Antiguo 03/03/2015, 10:54
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: crear este tipo de algoritmo en php

Cita:
Iniciado por azaz Ver Mensaje
gnzsoloyo me referia que una vez creada la logica tendria ese problema de recursos en el servidor, creo que optare por guardar los numeros en una tabla, gracias por tu ayuda, saludos.
Insisto: No confundas lógica con impementación. No necesariamente esos numeros deben guardarse. Bien podría ser que adminsitrados dinámicamente sea igual o mejor para la aplicación.
No siemrpe las cosas son Blanco/Negro.

Empecemos por el principio: ¿En qué forma está esa "tabla" de datos contra los que se validará?
¿En la base?
¿En la vista?
¿En un objeto de PHP?

Posdata: La solución de dastrash es funcional si la cantiadd de numeros posibles es acotada. Si se eleva... podrrías terminar con problemas de performance.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 03/03/2015, 14:08
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 13 años, 3 meses
Puntos: 10
Respuesta: crear este tipo de algoritmo en php

Hola gnzsoloyo, realmente no tengo tablas creada todavia solo quiero saber como seria la mejor forma de crear eso obtener numeros aleatorios en un rango y insertarlos en una tabla para que no se repitan.
Que opcion me das no consigo tenerlo claro, cualquier ayuda me va bien, saludos.
  #9 (permalink)  
Antiguo 03/03/2015, 14:50
 
Fecha de Ingreso: enero-2015
Mensajes: 205
Antigüedad: 9 años, 2 meses
Puntos: 18
Respuesta: crear este tipo de algoritmo en php

ummm, mira yo te doy un manera de hacerlo, simple, pero puedes encontrar 1000, sin tabla (tabla de base de datos , me refiero :) )

Te hago un ejemplo con 10 números. Digamos que tengo estos números , tu pon los que quieras. En un array o dónde tu quieras.

21-22-23-24-25-26-27-28-29-30

Genero un número aleatorio del tamaño del array, solo tengo 10 posiciones en el array (de 0-9 en algunos lenguajes)

Como tengo 10 numeros genero un número "ramdon de 10" , te da el 6 .

Cuento la posición 6 que no esté vacia.

1 -2 -3 -4 -5 -6
21-22-23-24-25-26-27-28-29-30

Cojo el número que me da , el 26.

Vacio ese campo , para que no se repita, o reescribo el array, como quieras. yo lo voy a vaciar.
ahora tengo un array de 10 posiciones con 9 valores.

1 -2 -3 -4 -5 -6 -7 -8 - 9 - 10
21-22-23-24-25- -27-28-29-30

Vuelvo a generar un número ramdon , o bien ramdom de 10 y del último vuelvo al primero de la fila, o bien de del tamaño del array menos las posiciones vacias. , o menos los numeros que he sacado.

El ramdom me da 2, cojo el número 22 y lo vacio

1 -2 -3 -4 -5 -6 -7 -8 - 9 - 10
21-22-23-24-25- -27-28-29-30

Quedará asi:
1 -2 -3 -4 -5 -6 -7 -8 - 9 - 10
21- -23-24-25- -27-28-29-30

Vuelvo a generar otro ramdon , ya he dicho que no iba a contar los huecos vacios.

El ramdom me da 3

cojo el numero 24 (el 2 no cuenta porque está vacio...)


1 -2 -3 -4 -5 -6 -7 -8 - 9 - 10
21- -23-24-25- -27-28-29-30


Vaya peli,bueno como verás hay muchas maneras de hacerlo, esta es una , ni si quiera creo que sea la más optima, quedaría mejor modificando el array en cada estracción y haciendo un ramdom del tamaño del nuevo array, ... pero es una solución

suerte!
  #10 (permalink)  
Antiguo 03/03/2015, 20:55
 
Fecha de Ingreso: marzo-2015
Mensajes: 15
Antigüedad: 9 años, 1 mes
Puntos: 3
Respuesta: crear este tipo de algoritmo en php

A ver si entendi, aca estaria la logica, vos adaptalo.

Código PHP:
//Devuelve un string de un numero aleatorio entre 0 y 100 y lo rellena con 0
function generarNumeroAleatorio(){
    return 
str_pad(rand(0,100),3,'0',STR_PAD_LEFT);
}


$numero_aleatorio;//aca guarda el numero generado por cada ciclo 
$numeros_tabla = array('001','033','008'); //los numero que no tienen que coincidir con el numero aleatorio

while(true){

    
$numero_aleatorio generarNumeroAleatorio(); 

    if(!
in_array($numero_aleatorio,$numeros_tabla)) //si no se encuentra entre los numero de la tabla
        
break; //corto el ciclo while
}

echo 
$numero_aleatorio//mostramos el numero generado 
  #11 (permalink)  
Antiguo 04/03/2015, 08:01
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: crear este tipo de algoritmo en php

El tema es bastante mas complejo de lo que parece a simple vista. Porque si solo tienes 100 números, te sirve cualquier solución, pero si tienes varios miles de millones no hay server que se banque verificar tanta cantidad de forma constante y menos aun levantarlos a memoria en un array.

Hace unos días tuve el mismo problema y allí publique la solución.

Si bien me sugirieron varias alternativas como la de @dashtrash o la de @darioPHP ninguna es viable.

En mi caso necesitaba una combinación de 15 números aleatorios del 0 al 99 que no estuviera previamente generada. Notese en mi solucion que el 15 va como parámetro, así que si necesitas menos cantidad, solo tienes que cambiar ese parámetro.

La primer solucion que planteo en ese tema no necesita mas que un campo autoincremental en la base de datos para funcionar, la segunda que esta mejorada, requiere un par de detalles adicionales.
Saludos!
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Última edición por NSD; 04/03/2015 a las 08:08
  #12 (permalink)  
Antiguo 04/03/2015, 09:35
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: crear este tipo de algoritmo en php

Cita:
Iniciado por NSD Ver Mensaje
Si bien me sugirieron varias alternativas como la de @dashtrash o la de @darioPHP ninguna es viable.
Porque el tuyo era otro problema.Estamos hablando de 100.Para miles de millones, o lo que sea, necesitas una forma de mapear el rango de soluciones posibles a un conjunto de indices, de forma que a un solo indice responde 1 sola solución.Y después, encontrar una forma de recubrir sin repetición el espacio de indices (numeros primos, etc).
Si tengo un espacio de 1000000 de posibles soluciones, ¿hay alguna forma de mapear un numero (ej, 5000) a una solución concreta? (usando representación binaria, árboles, números pseudoaleatorios, etc)...En fin, muchas formas.
Pero, para un espacio de 100 soluciones? No hay que liarse.
  #13 (permalink)  
Antiguo 04/03/2015, 09:47
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: crear este tipo de algoritmo en php

Cita:
Iniciado por dashtrash Ver Mensaje
Porque el tuyo era otro problema.Estamos hablando de 100.Para miles de millones, o lo que sea, necesitas una forma de mapear el rango de soluciones posibles a un conjunto de indices, de forma que a un solo indice responde 1 sola solución.Y después, encontrar una forma de recubrir sin repetición el espacio de indices (numeros primos, etc).
Si tengo un espacio de 1000000 de posibles soluciones, ¿hay alguna forma de mapear un numero (ej, 5000) a una solución concreta? (usando representación binaria, árboles, números pseudoaleatorios, etc)...En fin, muchas formas.
Pero, para un espacio de 100 soluciones? No hay que liarse.
Tranquilo @dashtrash.
No pretendía ofenderte.
De hecho lo aclare:
Cita:
Porque si solo tienes 100 números, te sirve cualquier solución
El problema que tuve (el cual por cierto ya esta solucionado) lo publique porque la solución resuelve a este perfectamente como caso particular, funciona tanto para 100 números como para 253338471349989000 (la cantidad exacta de mi problema).
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Última edición por NSD; 04/03/2015 a las 09:50 Razón: Ortografia
  #14 (permalink)  
Antiguo 05/03/2015, 07:57
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: crear este tipo de algoritmo en php

Cita:
Iniciado por NSD Ver Mensaje
Tranquilo @dashtrash.
No pretendía ofenderte.
De hecho lo aclare:

El problema que tuve (el cual por cierto ya esta solucionado) lo publique porque la solución resuelve a este perfectamente como caso particular, funciona tanto para 100 números como para 253338471349989000 (la cantidad exacta de mi problema).
Nah, no me sentia ofendido.
Pero si que querias que entendieras la respuesta.Pero eso me ha llevado a ver tu solución, la cual es tan dependiente del nímero de elementos, como otra.No funciona igual de bien con 100 que con 20mil millones.Tu solución confía en 2 cosas:
-1) El espacio de soluciones es muy grande
-2) El número de combinaciones a dar es un número muy inferior al tamaño del espacio de soluciones
Vamos, que de 2 mil millones, vas a sacar 100 cartones.
Y si presupones 1 y 2, puedes hacer cosas como guardar las soluciones anteriores, etc.

Pero si fueras a hacer 99.999.999 extracciones de 100.000.000 de elementos,
cuanto costaría todo eso?

Lee mi respuesta que dí antes.Hay que mapear el espacio de soluciones, en un espacio de indices, como una aplicación a <-> b . Data una solución, solo puede tener un indice.Dado 1 indice, solo puede haber 1 solución.Luego, encontrar un medio de recubrir el espacio de índices, que es mucho más fácil que intentar recubrir el espacio de soluciones.Y esto es muy dependiente de las soluciones, del coste de calcularlas, etc
  #15 (permalink)  
Antiguo 05/03/2015, 12:04
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: crear este tipo de algoritmo en php

Cita:
Iniciado por dashtrash Ver Mensaje
Nah, no me sentia ofendido.
Pero si que querias que entendieras la respuesta.Pero eso me ha llevado a ver tu solución, la cual es tan dependiente del nímero de elementos, como otra.No funciona igual de bien con 100 que con 20mil millones.Tu solución confía en 2 cosas:
-1) El espacio de soluciones es muy grande
-2) El número de combinaciones a dar es un número muy inferior al tamaño del espacio de soluciones
Vamos, que de 2 mil millones, vas a sacar 100 cartones.
Y si presupones 1 y 2, puedes hacer cosas como guardar las soluciones anteriores, etc.

Pero si fueras a hacer 99.999.999 extracciones de 100.000.000 de elementos,
cuanto costaría todo eso?

Lee mi respuesta que dí antes.Hay que mapear el espacio de soluciones, en un espacio de indices, como una aplicación a <-> b . Data una solución, solo puede tener un indice.Dado 1 indice, solo puede haber 1 solución.Luego, encontrar un medio de recubrir el espacio de índices, que es mucho más fácil que intentar recubrir el espacio de soluciones.Y esto es muy dependiente de las soluciones, del coste de calcularlas, etc
Puede ser, pero 99.999.999 extracciones de 100.000.000 no es mi problema ni el de este hilo

En el caso del problema de este tema el espacio de soluciones es muy pequeño (100 valores) y funciona perfectamente:
Código PHP:
Ver original
  1. $items = range(0, 99);
  2.  $random = [];
  3.  for($i=1; $i<=100; $i++)
  4.      $random[] = carton($items, 1, $i)[0];
  5.  
  6.  var_dump($random);
  7.  var_dump(count($random));

Si quieres seguir charlando sobre como mejorar el algoritmo para que funcione para cualquier caso (incluido el que tu propones) te invito a que lo sigamos en el otro hilo ya que aca poco tiene que ver con el problema original.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #16 (permalink)  
Antiguo 05/03/2015, 12:55
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: crear este tipo de algoritmo en php

Jejeje que divertido, hasta parecen niños
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #17 (permalink)  
Antiguo 05/03/2015, 17:04
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: crear este tipo de algoritmo en php

Cita:
Iniciado por NSD
Si bien me sugirieron varias alternativas como la de @dashtrash o la de @darioPHP ninguna es viable.
Cita:
Iniciado por NSD
Porque si solo tienes 100 números, te sirve cualquier solución,
O si...o no...

Cita:
Iniciado por NSD Ver Mensaje
Puede ser, pero 99.999.999 extracciones de 100.000.000 no es mi problema ni el de este hilo
Cita:
Iniciado por NSD Ver Mensaje
lo publique porque la solución resuelve a este perfectamente como caso particular, funciona tanto para 100 números como para 253338471349989000 (la cantidad exacta de mi problema).
O resuelve los casos..o no los resuelve...

Y para rematar, sieeeempre tiene que saltar uno que aporta...
Cita:
Iniciado por hhs
Jejeje que divertido, hasta parecen niños
Qué foro...

Última edición por dashtrash; 05/03/2015 a las 17:33
  #18 (permalink)  
Antiguo 05/03/2015, 18:29
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: crear este tipo de algoritmo en php

@dashtrash para aclarar algunas cosas que pareciera no hablamos el mismo idioma:

1) Si y No. Ambas respuestas son correctas. Son cosas diferentes.
Si. Propuestas como la tuya (la primera), la de @darioPHP, la de @informacionsys, la de @MMan y el sugerido por @pateketrueke, (la de @Nedned ni siquiera la entendí) NO SIRVEN cuando el CONJUNTO DE SOLUCIONES es muy grande, en mi caso eran 253338471349989000.

No. El problema que tu planteas es diferente porque tu propones QUE EL CONJUNTO DE VALORES INICIALES ES MUY GRANDE, eso otro tipo de problema.

Para resumir:

1 caso: Pocos valores iniciales, pocas soluciones: Ej. Este hilo. Solución: Cualquiera.
2 caso: Pocos valores iniciales, muchas soluciones: Ej. Mi hilo. Solución: La que propuse.
3 caso: Muchos valores iniciales, muchas soluciones: Ej. Lo que tu planteaste. Solución: No definida.

¿Se entiende?
Yo solo digo que mi solución resuelve los casos 1 y 2 pero no el 3. Publique el código que lo verifica.
Y afirmo, ademas, que las soluciones que plantearon los demás usuarios resuelven el caso 1, pero no el 2 ni el 3.

Ahora bien, seria interesante ver que propones para resolver el tercer caso.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Última edición por NSD; 06/03/2015 a las 09:11 Razón: Los putos colores que no salian

Etiquetas: tabla, tipo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:13.