Использование алгоритма Жадности Один из подходов к проблеме, имитирующий то, как дети выбирают команды для игры, - это жадный алгоритм, который перебирает числа в порядке убывания, присваивая каждому из них любое подмножество с меньшей суммой.Это хорошо работает, когда числа в наборе имеют примерно тот же размер, что и его мощность, или меньше.
Попробуйте это в python: если среднее значение существует, тогда может найти его, в противном случае оноприблизит вас к равному среднему.
a = [500, 1, -45, 46, -20, 100, -30, 4, 110]
b, c = [], []
m1, m2, n1, n2 = 0, 0, 0, 0
count = 0
for i in a:
if count == 0:
b.append(i)
n1 += 1
m1 = i
n1 = 1
count = 1
continue
else:
tmp_m1 = (m1 * n1 + i) / (n1 + 1)
tmp_m2 = (m2 * n2 + i) / (n2 + 1)
print b, c, tmp_m1, tmp_m2
if m1 > m2:
if(tmp_m1 - m2 < m1 - tmp_m2):
b.append(i)
m1 = tmp_m1
n1 += 1
else:
c.append(i)
m2 = tmp_m2
n2 += 1
else:
if(tmp_m1 - m2 < m1 - tmp_m2):
c.append(i)
m2 = tmp_m2
n2 += 1
else:
c.append(i)
m1 = tmp_m1
n1 += 1
print b, c, m1, m2
Sample output:
[500] [] 250 1
[500, 1] [] 151 -45
[500, 1, -45] [] 124 46
[500, 1, -45] [46] 108 13
[500, 1, -45, -20] [46] 106 73
[500, 1, -45, -20] [46, 100] 80 38
[500, 1, -45, -20, -30] [46, 100] 67 50
[500, 1, -45, -20, -30, 4] [46, 100] 73 85
[500, 1, -45, -20, -30, 4] [46, 100, 110] 73 73