Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Generar cadenas siguiendo un orden

Estas en el tema de Generar cadenas siguiendo un orden en el foro de PHP en Foros del Web. Hola, buenas tardes, llevo varios días intentando hacer lo mismo, a mi me gusta hacer las cosas por mi mismo, pero ya no que hacer. ...
  #1 (permalink)  
Antiguo 15/04/2013, 11:04
 
Fecha de Ingreso: diciembre-2010
Mensajes: 28
Antigüedad: 13 años, 4 meses
Puntos: 0
Pregunta Generar cadenas siguiendo un orden

Hola, buenas tardes, llevo varios días intentando hacer lo mismo, a mi me gusta hacer las cosas por mi mismo, pero ya no que hacer.

Lo que tengo que hacer es lo siguiente:

1. Generar todas las posibilidades (si no voy val son 65536) una cadena de números de 8 caracteres y cada número debe ser del 1 al 5. He intentado con rand() pero no es eficaz que ya que debo verificar que el número no se repita.

2. Generar todas las posibilidades de una cadena de la [a-z][A-Z][0-9]. Lo mismo con el generarlo aleatoriamente, debo verificar que no se repita.

Todo lo que he hecho ha sido con random, y veo que no es eficaz, me gustaría que dieran una orientación o pequeño ejemplo.

Muchas gracias.
  #2 (permalink)  
Antiguo 15/04/2013, 11:12
 
Fecha de Ingreso: abril-2008
Ubicación: El Salvador
Mensajes: 736
Antigüedad: 16 años
Puntos: 47
Respuesta: Generar cadenas siguiendo un orden

Mira un ejemplo en palabra sencillas...

Cada valor que vayas ocupando (Generado con randon o con otro algoritmo) guardalo en una tabla, luego cada vez que generes uno nuevo comparalo si lo tienes en la base si ya está guardado significa que lo usaste entonces genera otro y ya...
  #3 (permalink)  
Antiguo 15/04/2013, 11:39
 
Fecha de Ingreso: diciembre-2010
Mensajes: 28
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Generar cadenas siguiendo un orden

Pero es mucho más rápido seguir orden sin tener que comprobar si se ha repetido, porque sigues un orden.
  #4 (permalink)  
Antiguo 15/04/2013, 11:44
 
Fecha de Ingreso: abril-2008
Ubicación: El Salvador
Mensajes: 736
Antigüedad: 16 años
Puntos: 47
Respuesta: Generar cadenas siguiendo un orden

Si tienes mucha razón, pero si la cadena la generas aleatoriamente por le hecho de ser aleatoria no hay un orden definido por lo que es necesario llevar un registro de los codigos que vas ocupando
  #5 (permalink)  
Antiguo 15/04/2013, 11:48
 
Fecha de Ingreso: diciembre-2010
Mensajes: 28
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Generar cadenas siguiendo un orden

Sí, creo que voy a seguir con random pero los números es mucho mas fácil hacer un

Código PHP:
while ($actual $max) {


La forma final seria $n1$n2$n3$n4$n5$n6$n7$n8
Y quiero que cada número llegue como máximo a 5, y mínimo 1, pero mi error es que no sé como plantear que el número llegue a 5 y no se pase.

Gracias.
  #6 (permalink)  
Antiguo 15/04/2013, 11:53
 
Fecha de Ingreso: abril-2008
Ubicación: El Salvador
Mensajes: 736
Antigüedad: 16 años
Puntos: 47
Respuesta: Generar cadenas siguiendo un orden

Prueba con esto


Código PHP:
Ver original
  1. $caracteres = "123456789123456789";
  2.     $cadena = "";
  3.  
  4.      srand ((double) microtime() * 1000000);
  5.     $largo=5;
  6.      while ($largo){
  7.         $cadena .= substr( $caracteres, rand( 0, strlen( $caracteres )), 1);
  8.         $largo--;
  9.      }
  #7 (permalink)  
Antiguo 15/04/2013, 11:58
 
Fecha de Ingreso: diciembre-2010
Mensajes: 28
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Generar cadenas siguiendo un orden

No es lo que ando buscando,un ejemplo sería: 00000001, 00000002,00000003,00000004,00000005,00000011... y así sucesivamente... hasta llegar al límite que son 65535.
  #8 (permalink)  
Antiguo 15/04/2013, 12:03
 
Fecha de Ingreso: abril-2008
Ubicación: El Salvador
Mensajes: 736
Antigüedad: 16 años
Puntos: 47
Respuesta: Generar cadenas siguiendo un orden

aaaaaaaaaaa ok

mira entonces no necesitas un numero aleatorio, necesitas un numero secuencias, un correlativo o me equivoco?
  #9 (permalink)  
Antiguo 15/04/2013, 12:05
 
Fecha de Ingreso: diciembre-2010
Mensajes: 28
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Generar cadenas siguiendo un orden

Exacto, que siga un orden.
  #10 (permalink)  
Antiguo 15/04/2013, 12:12
 
Fecha de Ingreso: abril-2008
Ubicación: El Salvador
Mensajes: 736
Antigüedad: 16 años
Puntos: 47
Respuesta: Generar cadenas siguiendo un orden

sin duda necesitaras consular el ultimo numero generado, porque de lo contrario no sabrás en que secuencia te has quedado..
  #11 (permalink)  
Antiguo 15/04/2013, 12:45
 
Fecha de Ingreso: diciembre-2010
Mensajes: 28
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Generar cadenas siguiendo un orden

Bueno, miraré si lo consigo, en todo caso voy a seguir con random...

Muchas gracias!
  #12 (permalink)  
Antiguo 15/04/2013, 17:07
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: Generar cadenas siguiendo un orden

Con...random?
Ya el por qué necesitas generar todas las combinaciones es algo que habría que ver...
Pero..Si tu solución a este problema es usar "random"...
Tu problema no es más que contar en base 5, o contar en base 58.Ninguna de las dos cosas es distinta a contar en base 10.En base 10, 8 cifras son 99.999.999.
Vamos, que para obtener el último número, la probabilidad de que tu rand te dé ese número, que sigue sin estar en el array, es de 1/99.999.999...
Y todo esto es en base 10.En base 58, que vas a irte a los miles de millones, espero que aumentes MUCHO el memory_limit y la RAM para tu array... y ni te cuento el time_limit.Desgraciadamente, PHP no permite poner el time limit en años...
  #13 (permalink)  
Antiguo 15/04/2013, 19:47
Avatar de Rafael
Modegráfico
 
Fecha de Ingreso: marzo-2003
Mensajes: 9.028
Antigüedad: 21 años, 1 mes
Puntos: 1826
Respuesta: Generar cadenas siguiendo un orden

Soy muy ignorante en programación.

¿Y si al uno le sumas uno, y luego más uno?
Como dice Dashtrash, usar un numero aleatorio es un problema exponencial, y un problema exponencial se dispara a niveles muuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu uy grandes.

Ya te lo había dicho Alex1084

La probabilidad que tu número inicial se repita es del 0%, pero luego comienza a subir.

Cuando tengas la mitad de los números la probabilidad es del 50% que se repita, por lo que debes de hacer 2 comparaciones.

Cuando lleves tus 65000 combinaciones tendrás que hacer unas 65 mil repeticiones para que el número no se repita... De verdad que es una manera muuuuuuuy ineficiente de hacer una secuencia del uno al 65 mil.
  #14 (permalink)  
Antiguo 15/04/2013, 20:39
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: Generar cadenas siguiendo un orden

Cita:
Iniciado por Hircine Ver Mensaje
Hola, buenas tardes, llevo varios días intentando hacer lo mismo, a mi me gusta hacer las cosas por mi mismo, pero ya no que hacer.

Lo que tengo que hacer es lo siguiente:

1. Generar todas las posibilidades (si no voy val son 65536) una cadena de números de 8 caracteres y cada número debe ser del 1 al 5. He intentado con rand() pero no es eficaz que ya que debo verificar que el número no se repita.

2. Generar todas las posibilidades de una cadena de la [a-z][A-Z][0-9]. Lo mismo con el generarlo aleatoriamente, debo verificar que no se repita.

Todo lo que he hecho ha sido con random, y veo que no es eficaz, me gustaría que dieran una orientación o pequeño ejemplo.

Muchas gracias.
Mi primera observación sería... ¿Y para qué c... quieres hacer semejante cosa?

La segunda sería: ¿Te das cuenta que la posibilidad de repetición del numero es muy alta en un sistema regulado por un un valor que se toma de un reloj?

La tercera sería: En el segundo caso, considerando sólo ocho caracteres, tendrías 66^8, es decir, 360.040.606.269.696 combinaciones posibles...
¿Te das cuenta que aún generando 1.000 de combinaciones por segundo, considerando la curva de descenso de inserciones por repeticiones, el tiempo necesario puede ser infinito, no?
¿Te acuerdas de la curva logarítmica? ¿La función módulo y su inversa? ¿Recuerdas algo de Límites de X -> 0, para Y = (1+1/x)^1/x?



Insisto: ¿Para qué d... quieres hacer eso?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 15/04/2013 a las 20:48

Etiquetas: cadenas
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 04:16.