Título: [Src] cRndNumbersNR ( Generar números aleatorios sin repetir [Very-Fast] ) Publicado por: BlackZeroX en 28 Mayo 2011, 10:47 am .
@Psyke1 Mas que una matriz quedaría precioso en una clase... al rato lo traslado a una clase para aumentar la velocidad de procesamiento, ya que de este modo se le aumenta el peformance ( en relación procesador/tiempo, pero no memoria ) con una clase. Este código es una mera actualización directa de este otro, se puede decir que es la version 2.0 [source] Números Aleatorio desde X a Y con excepciones. (http://foro.elhacker.net/programacion_visual_basic/source_numeros_aleatorio_desde_x_a_y_con_excepciones-t328566.0.html) Vaya solo le falta una opción a mi punto de vista y es meterle una lista de números antes de generar alguno tal cual se le hace en la función solo que ahora seria una propiedad, y podría modificarse en cualquier instante, pero eso se los dejo a ustedes, yo ya hice mi labor. * El ordenamiento QuickSort se sustituyo por una heuristica mas eficiente. En un modulo de clase: cRndNumbersNR.cls Código
uso simple: Código
Temibles Lunas!¡. Título: Re: [Src] cRndNumbersNR ( Generar números aleatorios sin repetir [Very-Fast] ) Publicado por: Psyke1 en 28 Mayo 2011, 13:24 pm (http://t2.gstatic.com/images?q=tbn:ANd9GcR6a0ECDRIl41EhYGChGUyy7895UC4fqiw7vVhQhm7zdfes33w8IQ&t=1)
:laugh: Wow, impresionante, y rapidísimo también. :D La única cosa que hecho en falta es la posibilidad de excluir números. :) Ya pensaré algo... :rolleyes: PD: ¿Algún año de estos seguiremos con nuestro proyecto secreto? :silbar: :xD DoEvents! :P Título: Re: [Src] cRndNumbersNR ( Generar números aleatorios sin repetir [Very-Fast] ) Publicado por: BlackZeroX en 29 Mayo 2011, 04:11 am La única cosa que hecho en falta es la posibilidad de excluir números. :) Ya pensaré algo... :rolleyes: PISTA: Debes buscar el indice del array donde se encuentre el valor a excluir y pasarlo por la función: Private Sub SeparateRange(ByVal lDivVal As Long, ByVal lindex As Long, ByRef vArray() As stRangos) Reformando la funcion ItsInArray se puede hacer, no me gustaría ver un For Next que recorra todos elementos del array ya que es algo muy feo y no entra en la relación Tiempo-Procesador ya que alentaria mucho el proceso. Dulces Lunas!¡. Título: Re: [Src] cRndNumbersNR ( Generar números aleatorios sin repetir [Very-Fast] ) Publicado por: Psyke1 en 29 Mayo 2011, 10:15 am .
mmmmmmmmmmmm Ook, pensaré algo... :rolleyes: DoEvents! :P Título: Re: [Src] cRndNumbersNR ( Generar números aleatorios sin repetir [Very-Fast] ) Publicado por: Psyke1 en 29 Mayo 2011, 20:34 pm Quizás puedas ahorrarte los RedimPreserve() que gastan mucho tiempo y redimensionarlo cada 1024 elementos.
¿Y para devolverlos en la propiedad GetNumbers() sería más rápido copiando el array CopyMemory()? :huh: DoEvents! :P Título: Re: [Src] cRndNumbersNR ( Generar números aleatorios sin repetir [Very-Fast] ) Publicado por: BlackZeroX en 29 Mayo 2011, 22:02 pm '
1024*4 = 4096 = 4kb's ---> Cache eso me estas sugiriendo?, aun así la probabilidad de que se ocupe la clase en un bucle tal cual lo hago es baja. GetNumbers() se puede usar Set también no tengo idea si se aumenta la velocidad... P.D.: Psyke1 -> Estoy saturado de tarea... lo bueno que ya entro para el ciclo vacacional en 5 días. Dulces Lunas!¡. Título: Re: [Src] cRndNumbersNR ( Generar números aleatorios sin repetir [Very-Fast] ) Publicado por: Psyke1 en 30 Mayo 2011, 00:35 am Algo así, por ejemplo:
Código
En cuanto a lo de copiar la matriz... :rolleyes: Hice este test y... :o ¡sorpresa! Gana RtlMoveMemory() ;-) Código
Resultado: (http://img202.imageshack.us/img202/6489/justinbieberko.jpg) DoEvents! :P Título: Re: [Src] cRndNumbersNR ( Generar números aleatorios sin repetir [Very-Fast] ) Publicado por: BlackZeroX en 30 Mayo 2011, 01:40 am .
OK, yo pensaba que decias por el array de stRangos (lvcsplit) . No hagas el test de esa manera,: estas aplicando la relación: Variable -> a -> Variable la debes aplicar (Miembro de clase)Propiedad -> a -> Variable La diferencia radica en que en una no hay PILA de datos y en otra si. Dulces Lunas!¡. Título: Re: [Src] cRndNumbersNR ( Generar números aleatorios sin repetir [Very-Fast] ) Publicado por: Psyke1 en 30 Mayo 2011, 12:12 pm . Sería genial que la técnica esa la emplearas también con vArray(), puesto que las estructuras pesan 8 Bytes.OK, yo pensaba que decias por el array de stRangos (lvcsplit) . No hagas el test de esa manera,: estas aplicando la relación: Variable -> a -> Variable la debes aplicar (Miembro de clase)Propiedad -> a -> Variable La diferencia radica en que en una no hay PILA de datos y en otra si. Dulces Lunas!¡. Es cierto lo que dices, en el test no conté con eso... :silbar: Está bien como está. :) Pd1: Código
Pd2: Estaría genial que pusieras más ejemplos usando todas las propiedades para que a la gente le quedara más claro. :rolleyes: Pd3: Citar P.D.: Psyke1 -> Estoy saturado de tarea... lo bueno que ya entro para el ciclo vacacional en 5 días. Ook, comienza la cuanta atrás... :xDDoEvents! :P Título: Re: [Src] cRndNumbersNR ( Generar números aleatorios sin repetir [Very-Fast] ) Publicado por: Karcrack en 30 Mayo 2011, 16:36 pm Mi granito de arena; Una forma más rápida de hacer el Swapnumbers() sin usar variable temporal:
Código
También acelerararias un poco si enlazases RtlMoveMemory() directamente desde NTDLL y no desde KERNEL32 ;) Título: Re: [Src] cRndNumbersNR ( Generar números aleatorios sin repetir [Very-Fast] ) Publicado por: 79137913 en 30 Mayo 2011, 16:52 pm HOLA!!!
Mi granito de arena; Una forma más rápida de hacer el Swapnumbers() sin usar variable temporal: Código
También acelerararias un poco si enlazases RtlMoveMemory() directamente desde NTDLL y no desde KERNEL32 ;) Que buena idea!!! Lo voy a tener en cuenta, puede servir mucho. GRACIAS POR LEER!!! Título: Re: [Src] cRndNumbersNR ( Generar números aleatorios sin repetir [Very-Fast] ) Publicado por: BlackZeroX en 8 Junio 2011, 02:00 am Agregue un proceso en el 1er post para poder Regenerar un numero X.
Dulces Lunas!¡. |