El problema de la partición se puede describir de la siguiente manera:
Dado un conjunto de N números, divida este conjunto en dos subconjuntos, s1 y s2, de modo que el valor absoluto de la diferencia entre la suma de los elementos de s1 y la suma de los elementos de s2 sea mínimo.
Sinteticamente: Minimiza los abdominales (sum (s1) – sum (s2))
- ¿Qué es el mapa de bits? ¿Dónde lo usamos?
- ¿Dónde es útil el conocimiento de las estructuras de datos en Swift?
- ¿Las ventajas del arreglo lineal desaparecen si el arreglo es demasiado corto? ¿Por qué veo 4-6 cajas de cajas?
- ¿Es posible crear dos manos robóticas independientes?
- ¿Cuáles son algunos de los códigos más pequeños que generan un número pseudoaleatorio?
Este problema puede parecer fácil de resolver instintivamente para un conjunto de tamaño pequeño, pero en realidad es bastante difícil de resolver cuando el conjunto es grande, debido a su complejidad no polinómica.
Un enfoque factible para resolver este problema para un conjunto grande es utilizar un algoritmo genético, con los individuos modelados como matrices binarias de tamaño N, donde ‘ceros’ significa que los números del conjunto original que están indexados por los mismos índices donde estos ‘ceros’ se encuentran presentes en el conjunto s1, y ‘unos’ significan que esos números están presentes en s2.
Luego, la evolución de estos individuos mediante la aplicación de un algoritmo genético tiende a dar como resultado una solución óptima al problema.