Este resultado se da en el caso general, con $2m$ objetos de peso total $4m$, con ninguno de los pesos superiores a $2m$.
Si una lista de P de los números enteros positivos sumas a$n$, entonces P se denomina partición de $n$. Vamos a |P| denota el número de elementos en P.
Sea S' el conjunto de las particiones P' de $2n$ |P'| = $n$ (es decir, cada partición P' en S "$n$ elementos y P' sumas de dinero a $2n$) con ningún elemento de P' superior a $n$.
Podemos transformar S' en un conjunto S restando 1 de cada elemento de cada uno de los P' en S'. S es entonces el conjunto de todas las particiones P de $n$, excepto para el singleton de la partición [$n$], ya que hemos reducido la suma de cada una de las P'$n$, y cada una |P| $ \le n$. Por el contrario, dado que S podemos recuperar S' mediante la adición de 1 a cada elemento existente en cada P y relleno de cada P con extra para obtener la longitud necesaria.
Así que podemos atacar el problema señalado en la pregunta examinando el conjunto de todas las particiones de 10 (a excepción de la partición de [10]), más que el conjunto de particiones de 20 de longitud 10 con ningún elemento superior a 10.
Dada una partición P de $n$, divida sus elementos en dos listas a y B de aproximadamente sumas iguales. Deje $a$ la suma de los elementos de a, y $b$ la suma de los elementos de B; $a + b = n$. WLOG, suponga $a \ge b$. Queremos minimizar la diferencia de $d = a - b$. Esto puede lograrse mediante un simple "codiciosos" algoritmo.
- Tipo P en orden descendente.
- Para cada una de las $p$ en P, anexar $p$ a lo de a y B en la actualidad tiene la suma más baja.
- Cuando haya terminado, swap a Y B, si es necesario para asegurarse de $a \ge b$.
La prueba de que este algoritmo hace, de hecho, minimizar $d$ se deja como ejercicio para el lector. :)
Ahora sólo tenemos que añadir la $a$ queridos a B y $b$ queridos a Una para obtener equilibrio en pesos. Pero este paso sólo es válida si $|A| \le b$$|B| \le a$, ya que se debe agregar uno a cada elemento existente en a y en B.
$1 \le b \le n/2 \le a \lt n $
$n$ es aún, por lo $n/2$ es un número entero.
Claramente, para cualquier P, la suma de sus elementos debe ser $ \ge |P|$, ya que cada elemento de P es al menos 1.
Por lo $|B| \le b \le a$, lo $|B| \le a$. Sólo queda demostrar que $|A| \le b$.
Si $d = 0$$a = b = n/2$$|A| \le n/2 = b$.
Ahora nos fijamos en el caso de que $d > 0$.
$a + b = n$, que es mucho, por lo $d = a - b$ es también incluso. Y ya es distinto de cero en lo que sigue, su valor mínimo es 2.
Para cualquier elemento $t$ en Una, si $t < d$ podríamos intercambiar $t$ a B a reducir la diferencia:
$$\begin{align}
\text{Let }& 0 < t < d\\
\text{Let }d' & = (a-t) - (b+t)\\
& = a - b - 2t\\
d' & = d - 2t\\
-d & < -t < 0\\
-2d & < -2t < 0\\
-d & < d-2t < d\\
-d & < d' < d\\
|d'| & < d
\end{align}$$
But A and B have been constructed to minimize $d$, so all elements in A must be $ \ge d$.
Si |A| se $\gt b$, es un valor mínimo sería $b+1$, y el valor mínimo de $a$ así sería
$$\begin{align}
(b + 1)d & = bd + d\\
& = bd + a - b\\
& = b(d-1) + a\\
\end{align}$$
But $d$ is an even integer > 0, so $b(d-1) + a \ge b + a = n >$, y tenemos una contradicción.
Por lo tanto $|A| \le b$.
Actualización
Que la prueba indirecta de que $|A| \le b$ ha sido molesto conmigo. :) Así que aquí está una prueba directa.
Cada elemento de a es $ \ge d$, lo $a \ge |A|d$
$$\begin{align}
d & > 1\\
bd & > b\\
bd + d & > b + d = a \ge |A|d\\
(b + 1)d & > |A|d\\
b + 1 & > |A|\\
b & \ge |A|\\
\end{align}$$
He encontrado algunos muy algoritmos eficientes para la generación de particiones a través de esta respuesta a la pregunta Algoritmo de generación de particiones de enteros. Usted puede ver el original de código de Python para que el algoritmo de particionamiento en Jerome Kelleher del sitio, y su documento sobre la eficacia de los diversos algoritmos de particionamiento en arXiv la Generación de Todas las Particiones: Una Comparación De Dos Codificaciones. La mayoría de los algoritmos de particionamiento de encontrar en la Red son recursivos, así que es agradable ver a algunos eficiente de los algoritmos iterativos. :) Según Jerónimo de papel, el algoritmo optimizado que aparece en su sitio web es la forma más eficiente de partición algoritmo conocido.
En el cierre, aquí están los resultados de algunos de Python de código que escribí mientras que para abordar este problema. Las particiones son ordenados en d y la partición de los elementos.
Balanced partitions for 10
1: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
0, [1, 1, 1, 1, 1] 5, [1, 1, 1, 1, 1] 5
[2, 2, 2, 2, 2], [2, 2, 2, 2, 2]
2: [2, 1, 1, 1, 1, 1, 1, 1, 1]
0, [2, 1, 1, 1] 5, [1, 1, 1, 1, 1] 5
[3, 2, 2, 2, 1], [2, 2, 2, 2, 2]
3: [2, 2, 1, 1, 1, 1, 1, 1]
0, [2, 1, 1, 1] 5, [2, 1, 1, 1] 5
[3, 2, 2, 2, 1], [3, 2, 2, 2, 1]
4: [2, 2, 2, 1, 1, 1, 1]
0, [2, 2, 1] 5, [2, 1, 1, 1] 5
[3, 3, 2, 1, 1], [3, 2, 2, 2, 1]
5: [2, 2, 2, 2, 1, 1]
0, [2, 2, 1] 5, [2, 2, 1] 5
[3, 3, 2, 1, 1], [3, 3, 2, 1, 1]
6: [3, 1, 1, 1, 1, 1, 1, 1]
0, [3, 1, 1] 5, [1, 1, 1, 1, 1] 5
[4, 2, 2, 1, 1], [2, 2, 2, 2, 2]
7: [3, 2, 1, 1, 1, 1, 1]
0, [3, 1, 1] 5, [2, 1, 1, 1] 5
[4, 2, 2, 1, 1], [3, 2, 2, 2, 1]
8: [3, 2, 2, 1, 1, 1]
0, [3, 1, 1] 5, [2, 2, 1] 5
[4, 2, 2, 1, 1], [3, 3, 2, 1, 1]
9: [3, 2, 2, 2, 1]
0, [3, 2] 5, [2, 2, 1] 5
[4, 3, 1, 1, 1], [3, 3, 2, 1, 1]
10: [3, 3, 1, 1, 1, 1]
0, [3, 1, 1] 5, [3, 1, 1] 5
[4, 2, 2, 1, 1], [4, 2, 2, 1, 1]
11: [3, 3, 2, 1, 1]
0, [3, 2] 5, [3, 1, 1] 5
[4, 3, 1, 1, 1], [4, 2, 2, 1, 1]
12: [3, 3, 2, 2]
0, [3, 2] 5, [3, 2] 5
[4, 3, 1, 1, 1], [4, 3, 1, 1, 1]
13: [4, 1, 1, 1, 1, 1, 1]
0, [4, 1] 5, [1, 1, 1, 1, 1] 5
[5, 2, 1, 1, 1], [2, 2, 2, 2, 2]
14: [4, 2, 1, 1, 1, 1]
0, [4, 1] 5, [2, 1, 1, 1] 5
[5, 2, 1, 1, 1], [3, 2, 2, 2, 1]
15: [4, 2, 2, 1, 1]
0, [4, 1] 5, [2, 2, 1] 5
[5, 2, 1, 1, 1], [3, 3, 2, 1, 1]
16: [4, 3, 1, 1, 1]
0, [4, 1] 5, [3, 1, 1] 5
[5, 2, 1, 1, 1], [4, 2, 2, 1, 1]
17: [4, 3, 2, 1]
0, [4, 1] 5, [3, 2] 5
[5, 2, 1, 1, 1], [4, 3, 1, 1, 1]
18: [4, 4, 1, 1]
0, [4, 1] 5, [4, 1] 5
[5, 2, 1, 1, 1], [5, 2, 1, 1, 1]
19: [5, 1, 1, 1, 1, 1]
0, [5] 5, [1, 1, 1, 1, 1] 5
[6, 1, 1, 1, 1], [2, 2, 2, 2, 2]
20: [5, 2, 1, 1, 1]
0, [5] 5, [2, 1, 1, 1] 5
[6, 1, 1, 1, 1], [3, 2, 2, 2, 1]
21: [5, 2, 2, 1]
0, [5] 5, [2, 2, 1] 5
[6, 1, 1, 1, 1], [3, 3, 2, 1, 1]
22: [5, 3, 1, 1]
0, [5] 5, [3, 1, 1] 5
[6, 1, 1, 1, 1], [4, 2, 2, 1, 1]
23: [5, 3, 2]
0, [5] 5, [3, 2] 5
[6, 1, 1, 1, 1], [4, 3, 1, 1, 1]
24: [5, 4, 1]
0, [5] 5, [4, 1] 5
[6, 1, 1, 1, 1], [5, 2, 1, 1, 1]
25: [5, 5]
0, [5] 5, [5] 5
[6, 1, 1, 1, 1], [6, 1, 1, 1, 1]
26: [2, 2, 2, 2, 2]
2, [2, 2, 2] 6, [2, 2] 4
[3, 3, 3, 1], [3, 3, 1, 1, 1, 1]
27: [3, 3, 3, 1]
2, [3, 3] 6, [3, 1] 4
[4, 4, 1, 1], [4, 2, 1, 1, 1, 1]
28: [4, 2, 2, 2]
2, [4, 2] 6, [2, 2] 4
[5, 3, 1, 1], [3, 3, 1, 1, 1, 1]
29: [4, 3, 3]
2, [3, 3] 6, [4] 4
[4, 4, 1, 1], [5, 1, 1, 1, 1, 1]
30: [4, 4, 2]
2, [4, 2] 6, [4] 4
[5, 3, 1, 1], [5, 1, 1, 1, 1, 1]
31: [6, 1, 1, 1, 1]
2, [6] 6, [1, 1, 1, 1] 4
[7, 1, 1, 1], [2, 2, 2, 2, 1, 1]
32: [6, 2, 1, 1]
2, [6] 6, [2, 1, 1] 4
[7, 1, 1, 1], [3, 2, 2, 1, 1, 1]
33: [6, 2, 2]
2, [6] 6, [2, 2] 4
[7, 1, 1, 1], [3, 3, 1, 1, 1, 1]
34: [6, 3, 1]
2, [6] 6, [3, 1] 4
[7, 1, 1, 1], [4, 2, 1, 1, 1, 1]
35: [6, 4]
2, [6] 6, [4] 4
[7, 1, 1, 1], [5, 1, 1, 1, 1, 1]
36: [7, 1, 1, 1]
4, [7] 7, [1, 1, 1] 3
[8, 1, 1], [2, 2, 2, 1, 1, 1, 1]
37: [7, 2, 1]
4, [7] 7, [2, 1] 3
[8, 1, 1], [3, 2, 1, 1, 1, 1, 1]
38: [7, 3]
4, [7] 7, [3] 3
[8, 1, 1], [4, 1, 1, 1, 1, 1, 1]
39: [8, 1, 1]
6, [8] 8, [1, 1] 2
[9, 1], [2, 2, 1, 1, 1, 1, 1, 1]
40: [8, 2]
6, [8] 8, [2] 2
[9, 1], [3, 1, 1, 1, 1, 1, 1, 1]
41: [9, 1]
8, [9] 9, [1] 1
[10], [2, 1, 1, 1, 1, 1, 1, 1, 1]