FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Hola, a ver me explico otra vez espero que esta vez mejor. Comenzaré por explicar el funcionamiento del programa, lo que espero que haga.
1º En el combo box, tengo una serie de valores que van de 5000 a 10.000.000 (aunque realmente como máximo uso 2.000.000). 2º En función de este valor, el programa genera x numero de combinaciones aleatorias y las almacena en un listview. 3º De entre todas esas combinaciones generadas, que pueden ser 5000 o 5 millones, busca los 6 números que mas veces han salido y calcula sus permutaciones (de ahí que combinatoria ordene esos 6 números). En 2 listbox genera las permutaciones de 6 y 5 numeros respectivamente 4º Las permutaciones almacenadas en per, que son de 5 números, las compara con lista3. 5º En otro listview (lista3), carga un archivo csv con sorteos ya jugados y a partir de las permutaciones del listbox "per" va comparando 1 a 1 con cada fila de ese listview 6º El programa tiene 3 métodos de busqueda: fuerza bruta, busqueda del 5 y selectiva por sorteos ya jugados. 6.1. El metodo "fuerza bruta" compara cada permutacion en base a 6 números con cada una las filas del listview que muestra las combinaciones aleatorias, es decir busca cada permutacion entre 5 mil.... 5mill de combinaciones, comparando. Si encuentra los 6 números de la permutacion me lanza un messagebox y me indica en que fila del listview aparece. Este método es muy tedioso y lento por que encontrar 6 numeros exactos es casi imposible por lo que realmente apenas lo uso. 6.2 Método "búsqueda del 5" básicamente hace lo mismo que el método anterior pero en lugar de 6 números con sus coincidencias, busca 5 con lo que las posibilidades de encontrarlos es mayor. 6.3 Método de "busqueda selectiva", realmente este método no tiene mayor importancia por que al igual que el método anterior, busca 5 coincidencias sobre los sorteos ya jugados. Tanto este método como busqueda del 5, usan las permtuaciones del listbox "per" de 5 números. De encontrarlos, tanto para el punto 6.3 y 6.2 me indica donde se encuentra esas coincidencias en los listview (lista [combinaciones aleatorias] o lista3 [combinaciones de sorteos previos]). Ahora la teoría, mi teoría que obviamente no tiene que ser válida pero es la que quiero explotar: Si el método de búsqueda del 5 encuentra 5 coincidencias en alguna de las filas entre el millon de combinaciones aleatorias, la aceptaría como válida estadisticamente y es la que jugaría. Esto es válido para "Búsqueda selectiva", que es a la que pertenece todo el código aquí expuesto. Para la busqueda del 5 es lo mismo salvando las diferencias en cuanto a nombre de controles y variables. En cuanto a lo que dices bucanero, es cierto lo del progress bar y lo de la variable, paso a corregirlo. En cuanto a combinatoria, más arriba expliqué su función. Sobre la parte del código que no muestro. Esa parte la he modificado para que simplemente muestre un mensaje diciendo que no encontró esas 5 coincidencias búscadas. Sino son 5, el programa las ignora. 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. |
#2
|
||||
|
||||
He cambiado el código a esto:
Buscar Comunes
Parece que recorre la lista3 y lo compara con per pero incluso habiendo una combinación real de 5 aciertos sigue sin encontrarla, además el proceso es eterno, tarda como 1 seg. por cada comparacion y eso que solo son 120 permutaciones, cuando sean 720 y 50.000 combinaciones aleatorias... no sería factible creo. Un saludo.
__________________
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. |
#3
|
||||
|
||||
Es que, para empezar, debes olvidarte de todo lo que sea manejo de cadenas de texto, presentación en pantalla, labels, edits, listview, etc.
Tienes que optimizar/afinar muchísimo si quieres que funcione de forma ágil. Si vas a trabajar con números, entonces usa integer. Si vas a necesitar un grupo de ellos, entonces usa un array de integer. Y mejor aún, punteros a array de integer. Empieza por hacer un prototipo simple, lo más simple y elemental posible, y a ser posible con papel y lápiz. Este es un tema muy estudiado, y muchas personas por el mundo han propuesto "soluciones" muy diversas, es algo muy complejo (si fuese fácil, todos seríamos millonarios ), por lo que hay que afinar al máximo. Debes tener una base/estructura muy bien depurada para luego trabajar sobre ella con todo lo nuevo que se te ocurra añadir o probar. Puedes buscar por internet algunos proyectos similares a los que quieres hacer y verás que no tiene mucho que ver con la forma en que estás atacando el problema. Échales un vistazo, te lo aconsejo. |
#4
|
||||
|
||||
Hola Casimiro, consejo aceptado, haré algo sencillo y desde ahí ire subiendo. 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. |
#5
|
|||
|
|||
Cita:
De hecho haz la siguiente prueba, ejecuta este procedimiento y veras como a cada permutación de tu lista PER obtienes el mismo valor en la función ValorCombinacion, y eso solo te hace repetir cálculos innecesarios una y otra vez
Creo que no necesitas ni el listbox PER ni la función que te lo rellena. Para generar una combinación aleatoria yo usaría algo así:
Y todo fuera de los componentes visuales. Yo te recomiendo que para separar toda la parte visual de los cálculos, utilices un datamodule o una simple unidad independiente para meter todos los procesos referentes a calculo y en el formulario solo dejes la parte visual. Y por tema de velocidad en el tipo de rutinas que hacen calculos de forma masiva, intentan en la medida de todo lo posible no hacer llamadas a elementos visuales ni refresco de la información de los mismos, pues son rutinas que se pueden ejecutar varios millones de veces, y las llamadas a componentes visuales son muy lentas, a parte de que te pueden dejar muy tirado el programa. Cita:
|
#6
|
||||
|
||||
Bueno, gracias por vuestro tiempo.
__________________
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. |
#7
|
||||
|
||||
Hola de nuevo,
Sigo con lo mismo porque no lo consigo, me estoy centrando en el método de bucanero y tengo una duda. en los edit1,2,3,4,5 y 6 están los numeros que mas veces salen. En su método, se comparan dos listbox completos, pero y si quiero comparar tan solo 1 item de un listbox con todos los de otro listbox? por que a mi me da error. 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
|
|||
|
|||
hola danielmj,
Puedes poner la parte del código que te da error. Y el error que te da saludos |
#9
|
||||
|
||||
Hola bucanero, ya no se ni que poner, estoy tan quemado con esto que me tiene frustrado.
Estoy comenzando un núevo método para generar números aleatorios sin repeticiones y a partir de ahí sacar los mas repetidos y sobre los mas repetidos (que formarian una combinacion de 6 numeros) le implementaria tu método de comparar combinaciones, solo que sería entre esos 6 unicos numeros y todo un listbox en el que he volcado los elementos de un listview (que por ejemplo tiene 5000 combinaciones). Voy a dejarlo ahora por que me tiene ya saturado y prefiero despejarme un poco para poder seguir. XD
__________________
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. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
sumando valores de un listview | danielmj | Varios | 28 | 14-11-2014 21:52:30 |
VALORES FANTASMAS FIREBIRD 2.1 valores Grandes | ASAPLTDA | Firebird e Interbase | 17 | 02-12-2012 12:09:02 |
Rellenar con 0.... | buitrago | Varios | 6 | 17-11-2011 20:02:53 |
¿Cómo insertar una imágen en un lisbox o un memo? | Acuarius3000 | Gráficos | 3 | 27-06-2005 08:44:53 |
arastrar archivos a un lisbox | gulder | C++ Builder | 3 | 05-05-2005 13:31:50 |
|