![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Hola, de momento he cambiado el orden de los for y ahora me genera los 6 numeros durante 100 posiciones de la lista sin repetirlos, pero llega un momento en que solo genera numeros del 1 al 9 obviando el resto hasta el 49. ¿?
Sobre vuestros codigos, me pongo con ellos y os comento. En un rato entro a trabajar, no sé si me dará tiempo hoy. Saludos y gracias. http://pasteall.org/pic/index.php?id=107869
__________________
La juventud pasa, la inmadurez se supera, la ignorancia se cura con la educación, y la embriaguez con la sobriedad, pero la estupidez dura para siempre. Aristofanes. |
#2
|
||||
|
||||
Cita:
Es totalmente posible que una funcion random genere un millon de veces el *mismo* numero. De hecho, una funcion random real se graficaria y daria que hay varios "clusters" alrededor de un grupo de numeros, sin que haya una distribucion perfecta de las posiblidades. -- * Asumiendo que el codigo este bien hecho y no altere aun mas los resultados.
__________________
El malabarista. |
#3
|
||||
|
||||
Hola mamcx,
No puedo poner código ahora, estoy con el móvil desde el curro, pero ya me funciona He cambiado el orden de los for y la línea que dice creaste(6) creo recordar, La he cambiado por creaste(49) y ya tiene más lógica. Al millón de combinaciones no he llegado, he tenido que apagar la máquina antes he llegado a 342 mil y pico, y esa es otra, necesito exprimir el listview para ver dónde esta su límite. Si depende de la memoria del sistema no me preocupa Pero si tiene alguna limitación en lo que es la programación del mismo control, Entonces faltará y quiero saber cuándo para saber el número Marconi combinaciones Que el listview puede almacenar en sus filas. De todos modos, aún no la doy por terminada, ya me devuelve los 6 números que más se repiten Pero ahora tengo que usar las combinaciones y las permutaciones de las matemáticas Para mostrar esa combinación firmada por los seis números más repetidos de todas las formas posibles. Que para ser 6, si no me equivoco, tiene 720 posibles formas de mostrar la misma combinación. Así que aún queda. Un saludo y por si acaso perdonar pero estoy escribiendo con el móvil.
__________________
La juventud pasa, la inmadurez se supera, la ignorancia se cura con la educación, y la embriaguez con la sobriedad, pero la estupidez dura para siempre. Aristofanes. |
#4
|
||||
|
||||
Cita:
Las funciones Random si son uniformes. Todas* tienen la misma probabilidad de salir: 1/m siendo m el período que tenga el generador. *Todas las que se precien, y que están bien implementadas. Tenemos los clásicos generadores congruencial mixto y/o multiplicativo, como el gran generador MT19937N que es una implementación de Mersenne Twister; ampliamente probado y que está implementado como base en muchos lenguajes. Entre ellos: Lazarus. Delphi que yo sepa sigue usando un congruencial mixto. Y digo que son uniformes porque fueron pensadas para generar números en el rango [0, 1) Estas funciones random luego se deben volcar en la distribución que uno necesite para generar las Variables Aleatorias que pretende recrear o simular, calcular, etc. Por ejemplo, se puede usar una distribución normal, una uniforme, una exponencial, etc. Todas estas toman el valor R (random) y aplica el algoritmo de la función inversa acumulada F de dicha distribución. Por ejemplo para el caso de una distribución uniforme:
Y para la distribución normal es un poco más complicada, ya no la recuerdo muy bien... no me animo a poner un código realmente no vaya a ser cosa que le pifie. Recuerdo de un método relativamente rápido y lo suficiente preciso para la mayoría de las situaciones, e inspirado en la teoría del límite central. Se calculaba la suma de 6 u 12 (no recuerdo bien) valores R, y luego se procedía a ¿multiplicar? por el valor de la desviación estándar pasado como parámetro. Era un algoritmo relativamente simple. Como es de esperar, las variables aleatorias obtenidas con esta distribución seguirán la forma normal. Y así, es para cada distribución que uno quiera. En términos abstractos, matemáticamente tenemos VA = F(p1...pN, GEN); Siendo VA la Variable Aletoria F la función inversa para la distribución que uno requiera p1 a pN los parámetros que requiere la distribución GEN la función generadora de números pseudoaletorios [0,1) Los repetidos que uno observa cuando hace uso de random en Delphi o en cualquier otro lenguaje se debe a que: 1. Está acotando el rango de secuencia a adoptar un valor mucho más chico. Por ejemplo, cuando "yo quiero números aletorios entre 1 y 50" random(50) lo que hará es traducir esos decimales infinitos a un rango finito. Este ejemplo es un tipico caso de una uniforme (A = 1, B = 50). Si en lugar de que el rango sea 50 sino un número mucho más grande.... 10^32 por ejemplo estos decimales entre 0 y 1 aportan mucho más riqueza y la probabilidad de encontrar repetidos disminuye. 2. O ha generado tantos números que se ha completado la secuencia de m-1 números distintos que es capaz de generar. Este m es un valor bastante grande. Un generador bien planteado, generará m-1 números distintos (insisto... si toma el valor R en 0..1 en su concepción infinita... recordemos que la aritemética de punto flotante tiene precisión finita) y empezará el nuevo ciclo (la misma secuencia) a partir del m-esimo número. Mamx por favor evita pasar estas vergüenzas, no es bueno que tenga que estar corrigiendote seguido. Confundes al chico. A repasar se ha dicho... yo también que ya no recuerdo el algoritmo para la distribución normal. Saludos, |
#5
|
||||
|
||||
Recordaba que antes había expuesto los algoritmos (al menos de las 3 distribuciones más comunes). Guarden en caja fuerte, hagan backups, metan servidores espejos, etc.. a ese hilo.
Saludos, |
#6
|
||||
|
||||
Cita:
He dado algunas vueltas a ver de donde saque tal idea, y creo que aqui hay un buen tema al respecto: http://blog.blprnt.com/blog/blprnt/y...-visualization Lo que se ve mas claro en las graficas es que los numeros aleatorios no siguen una progresion uniforme *estricta* tal como lo entenderia ingenuamente un ser humano. Sino que se pueden agrupar los resultados y ocurrir "brincos". Que era lo que intentaba decir en respuesta a: Cita:
Ahora, como realmente se debe explicar esto?
__________________
El malabarista. |
#7
|
||||
|
||||
Buenos dias roman,
He probado tu codigo en una aplicación a parte, y si funciona gracias. Saludos.
__________________
La juventud pasa, la inmadurez se supera, la ignorancia se cura con la educación, y la embriaguez con la sobriedad, pero la estupidez dura para siempre. Aristofanes. |
#8
|
||||
|
||||
Cita:
A ver si me siguen la idea: Queremos números en el rango [1,10) distribuídos uniformemente. Imaginemos a los números distribuídos en una regla: 0----------1----------2----------3----------4----------5----------6----------7----------8----------9----------10 Ahora debemos escalar/estirar la regla del rango [0,1) sobre esta: 0----------1----------2----------3----------4----------5----------6----------7----------8----------9----------10 0---------.1---------.2----------.3---------.4---------.5---------.6---------.7----------.8---------.9----------1.0 Podemos apreciar la razón o proporción entre ambas. De igual forma podemos inferir que hay una zona difusa ente 0.1 y 0.2. ¿Por ejemplo, que número debemos asumir si el valor R random es 0.15? Tenemos un hueco, y esto se debe a que para generar números enteros estamos "perdiendo esa precisión" hermosa que nos aportan los decimales. Hay infinitos valores R entre la VA = 1 y VA = 2. Pero estadísticamente la mitad de ellos van a traducirse a 1 y la otra mitad en 2. Cuando dos valores R son muy próximos entre si al "redondear" obviamente tendremos un VA repetido. Imaginemos ahora que la regla para la VA es de [0,100) 0----------10----------20----------30----------40----------50----------60----------70----------80----------90----------10 0-----------.1----------.2-----------.3----------.4-----------.5----------.6-----------.7-----------.8----------.9-----------1.0 Un R entre 0.4 y 0.5 podrá producir 10 valores distintos de VA. ¿Y si repetimos el ejercicio con un rango [A,B) muchísimo más grande como 53454365462989021? ¡Perfecto! La magia del azar parece funcionar mucho mejor ¿que no? En aquellas distribuciones de números reales, los efectos de huecos son menos vistos ya que aprovechan mejor los decimales. Los problemas y dificultades de entender la pseudo aleatoriedad está cuando uno necesita aplicar en distribuciones de números enteros. Son más prospensos a los repetidos. No es difícil de entender. Saludos, |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
No repetir lineas | lbidi | SQL | 2 | 09-09-2014 02:19:54 |
Repetir una accion | lmpadron | C++ Builder | 5 | 29-07-2010 20:21:31 |
Repetir valor | altp | SQL | 7 | 27-06-2007 13:23:05 |
Es sano repetir? | Johnny Q | OOP | 4 | 12-07-2005 21:09:51 |
no repetir campos | ebeltete | SQL | 5 | 22-05-2003 04:32:53 |
![]() |
|