Ver Mensaje Individual
  #1  
Antiguo 23-12-2013
paquechu paquechu is offline
Miembro
 
Registrado: oct 2008
Posts: 51
Reputación: 16
paquechu Va por buen camino
Mejorar rendimiento en tratamiento de grupos de números

Hola,
Estoy haciendo pruebas para programar el tratamiento de grupos de números, de forma que pueda comparar cada una de las posibles combinaciones de la loto 6/49 (aprox. 14Millones) con todas las líneas que pueda tener un grupo.

Un grupo puede estar formado por 100, 200, 10.000 o más líneas y la cantidad de números de cada línea puede ser también variable. Un ejemplo de grupo sería:

12,15,27
1,13,43,44,48,49
3,9,16,27,29

Este tendría solamente 3 líneas pero me planteo trabajar con grupos de 10.000 o 50.000 líneas o incluso más.

El problema que tengo es la lentitud de los procesos de evaluación, tarda muchisimo y no se si es por la definición del tipo de variables, por la ineficiencia del código empleado o por ambas cuestiones.

Actualmente estoy utilizando un array numérico bidimensional para contener todas las combinaciones posibles comb[1..13983816][1..6] y otro array de tipo string para almacenar los números del grupo a evaluar.

El pseudocodigo que empleo es el siguiente (suponiendo que el grupo tiene 80 líneas):

Código Delphi [-]
aciertos_esperados='0,1'

Por_Cada_Combinacion_Posible (i=0 hasta 13983816)
  
  Por_Cada_Linea_De_Grupo (L=0 hasta 80)
  
    aciertos=Contar_Aciertos( comb[i], grupo[L] )
    
    if aciertos está en aciertos_esperados
      EsValida=True
    si no
      EsValida=False
      Salir del bucle de grupo
    fin
  fin

fin

La funcion Contar_Aciertos compara cada numero de la combinacion comb[i] con cada número de los que aparece en la línea grupo[L]

Pues este es el problema. Tarda muchisimo y queria ver si alguno de vosotros tiene experiencia sobre este caso para conseguir que el proceso sea más rápido, bien definiendo las variables de alguna forma determinada o con otro tipo de proceso….

Muchas gracias.
Paco.
Responder Con Cita