Si buscas una solución rápida y perfecta, me temo que te decepcionaré. Esto se parece mucho al problema de Partición que es NP-Completo. Por lo tanto, para cualquier otra cosa que no sea una lista pequeña, no existe una solución eficiente conocida (aunque el problema de Partición tiene una solución de tiempo pseudo polinomial)
Un algoritmo codicioso que puede obtener una aproximación (basado en el algoritmo codicioso para el problema de partición) sería (suponiendo que desea minimizar la diferencia de los primeros números + la diferencia de los segundos números):
// S -> lista de tuplas de números
// dejemos que sum1 (X) sea la suma de los primeros números del conjunto, de manera similar sum2 (X)
// i [0] es el primer número de la tupla e i [1] es el segundo
partición de función (S)
A = []
B = []
// i <j si i [0] + i [1] <j [0] + j [1]
Ordenar S en orden descendente
para cada i en S
diff1 = sum1 (A) + i [0] – sum1 (B) + sum2 (A) + i [1] – sum2 (B)
diff2 = sum1 (B) + i [0] – sum1 (A) + sum2 (B) + i [1] – sum2 (A)
si diff1 <diff2
A.push (i)
más
B.push (i)
volver A, B
- ¿Por qué las computadoras no pueden programarse por sí mismas?
- Cómo probar o refutar [math] \ log (n!) \ In \ Theta (n ^ 2) [/ math] en notación asintótica
- ¿Es justo decir que las matemáticas, la informática y la programación se encuentran en la intersección de todas las materias?
- ¿Qué importancia tiene, si es que lo es, la teoría de grupos y el álgebra abstracta para comprender la programación funcional?
- Cómo representar más de la cantidad predeterminada de dígitos en números como (1/7) en Python
Básicamente, ¿en cada punto el codicioso algoritmo decide qué es mejor? Agregar i a la lista A o lista B. Mejor, en este caso es qué ruta llevaría a la más pequeña
diferencia de los primeros números + diferencia del segundo número