Распределение целых чисел с использованием весов? Как рассчитать?

Мне нужно распределить значение на основе некоторых весов. Например, если мои веса равны 1 и 2, то я ожидаю, что столбец с весом 2 будет иметь в два раза больше значения, чем столбец с весом 1.

У меня есть немного кода Python, чтобы продемонстрировать, что я пытаюсь сделать, и проблема:

def distribute(total, distribution):
    distributed_total = []
    for weight in distribution:
        weight = float(weight)
        p = weight/sum(distribution)
        weighted_value = round(p*total)
        distributed_total.append(weighted_value)
    return distributed_total

for x in xrange(100):
    d = distribute(x, (1,2,3))
    if x != sum(d):
        print x, sum(d), d

В приведенном выше коде показано много случаев, когда распределение значения приводит к тому, что сумма распределения отличается от исходного значения. Например, распределение 3 с весами (1,2,3) приводит к (1,1,2), что составляет 4.

Какой самый простой способ исправить этот алгоритм распределения?

ОБНОВИТЬ:

Я ожидаю, что распределенные значения будут целочисленными значениями. Неважно, как именно целые числа распределяются, если они составляют правильное значение, и они «максимально приближены» к правильному распределению.

(Под правильным распределением я подразумеваю нецелочисленное распределение, и я не полностью определил, что я имею в виду под «как можно ближе». Возможно, есть несколько допустимых выходных данных, если они составляют исходное значение.)

Ответы на вопрос(4)

Ваш ответ на вопрос