5 votos

Generar números aleatorios entre un rango tal que no viene dos veces.

Lo siento si mi pregunta es tonta, matemáticas ha sido siempre una bestia salvaje para mí. Soy un desarrollador de aplicaciones. En una aplicación que tengo un módulo en el cual se asigna al azar 6-8 número de dígitos y un número de serie a un administrador. El administrador podrá dar de estos dos números a otras personas que los utiliza como crédito en la aplicación. Actualmente Hay 134 gerentes y cada manager puede generar 50 códigos por día.

Para implementar tengo una tabla que contiene estos registros.

  1. Nº de serie (empieza en 1 y se mantiene en el incremento de los)
  2. Código de autorización (número aleatorio de 6-8 dígitos. No repetitivas)
  3. El administrador de código (código de administrador, que la ha generado.)
  4. Se Utiliza? (1 si el código ha sido utilizado demás 0)
  5. Utilizado en (fecha en la cual fue utilizada por lo que podemos eliminar este código, por lo que el código de autorización se pueden reutilizar.)

Cada vez que un administrador intenta generar un código, el programa crea un número aleatorio y ver si este número está presente o no en la tabla. Si está presente, me regenerar o de lo contrario me la guarde en la tabla.

Hasta ahí todo bien, pero el problema viene cuando muchos números están en uso.

Actualmente hay 1090083 código en la tabla. El total posible de se $99999999-999999 = 99000000$.

Pero a esta cantidad muy pequeña solo, estoy teniendo 2-8 colisiones, yo.e, el número aleatorio ya está ahí y tengo que generar otro. Este poro del gal y de la tabla crece pronto se convertirá en demonio.

Según yo, el problema radica en la generación de números. Por lo tanto, le pido a usted que me ayude.

Es posible crear una función en donde cada ireatation una nueva no-repetitiva número es outputed? Así que yo simplemente ejecutarlo $n$ veces para obtener $n$ números. O cualquier otra cosa ya sabes el problema.

0voto

vadim123 Puntos 54128

Más probable es que el generador de números aleatorios que utiliza es:

  1. Sembradas en algo tonto, y con frecuencia comienza en el mismo lugar, o
  2. No es capaz de generar todos los 8 números de dos dígitos, por lo que he hecho ya han utilizado la mayoría de los números aleatorios su método puede generar.

Ambos de estos problemas se fija si un mejor uso de generador de números aleatorios, tales como el Mersenne twister, que puede estar incluido dentro de su estándar de los paquetes ya.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X