Visual Basic - Algoritmo para buscar la mejor suma en un array

Life is soft - evento anual de software empresarial
 
Vista:

Algoritmo para buscar la mejor suma en un array

Publicado por jirm (58 intervenciones) el 05/03/2002 03:15:01
Agradecería si alguien tuviera alguna idea, para dado un array con "n" valores y un valor "x" encontrar "la suma de algunos de los valores del array que más se aproxime al valor x".

Ahora uso un simple bucle que va sumando desde el primer valor del array hasta que consiguo la suma "x", pero de esta forma no consiguo "la mejor aproximación" al valor buscado.

El array contiene un máximo de 150 valores.

Agracedecería mucho cualquier sugerencia.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Algoritmo para buscar la mejor suma en un array

Publicado por Richi317 (95 intervenciones) el 05/03/2002 11:27:05
La solución teórica es muy sencilla. La práctica... un poco más complicada. Yo he hecho algo parecido para dos valores. Consiste en comparar TODOS con TODOS, empezando con 2 valores (ver si su suma se aproxima a X e ir almacenando las posiciones y la suma, para luego coger otros dos y hacer lo mismo: si es mejor aproximación que la anterior, sustituir los valores almacenados y continuar hasta que sea óptimo.
Si array=(a,b,c,d,e)
Sumas: a+b, a+c, a+d, a+e, b+c, b+d, b+e, c+d, c+e y d+e)

Una vez acabas con todas las posibles parejas (dos bucles: i=1 to n-1 y j=i+1 to n), empiezas con todos los posibles tríos, utilizando tres bucles:
i=1 to n-2
j=i+1 to n-1
k=j to n

Y así continuas... El problema surge si quieres probar con 10 valores, lo que implicaría utilizar 10 bucles, algo impensable, sobre todo si en lugar de 10 elementos pueden ser 1000. Para aliviar al procedimiento ordena el array y limítalo (los valores MAYORES que X no entrarán como posibles candidatos a ser sumados).
Para evitar anidaciones de N bucles apóyate en valores ya sumados (y sus posiciones) y súmale a este valor un posible candidato. Con esto sólo necesitarás dos bucles, puesto que lo que en realidad vas a sumar es un valor (formado por la suma de varios elementos) con un elemento más, evitando elementos ya utilizados en la suma.

Espero haberte ayudado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Algoritmo para buscar la mejor suma en un array

Publicado por jirm (58 intervenciones) el 06/03/2002 02:04:20
Estaba trabajando en algo similar pero tu analisis me ha aportado algunas buenas ideas, gracias mil...
Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar