Вы ищете количество комбинаций с одним элементом из каждого раздела?
Это просто n1*n2*...*nk.
Изменить: вы, кажется, также задаете отдельный вопрос:
Учитывая N, как мне назначить n1, n2, ..., nk так, чтобы их произведение было максимальным. На самом деле это не проблема линейной оптимизации, поскольку ваши переменные перемножаются.
Его можно решить с помощью некоторого исчисления, т. Е. Взяв частные производные по каждой из переменных с ограничением, используя множители Лагранжа.
В результате n1 .. nk должны быть как можно ближе к одному и тому же размеру.
if n is a multiple of k, then n_1 = n_2 = ... = n_k = n/k
otherwise, n_1 = n_2 = ... = n_j = Ceiling[n/k]
and n_j+1 = ... = n_k = floor[n/k]
В основном мы стараемся как можно более равномерно распределить элементы по разделам. Если они делятся поровну, отлично. Если нет, то мы делим как можно более равномерно, а из того, что осталось, мы даем дополнительный элемент каждому первому разделу. (Не обязательно должны быть первые разделы, этот выбор достаточно произволен.) Таким образом, разница в количестве элементов, принадлежащих любым двум разделам, будет не более единицы.
Кровавые подробности:
Это функция продукта, которую мы хотим максимизировать:
P = n1*n2*...nK
Определим новую функцию, используя множители Лагранжа:
Лямбда = P + l(N - n1 - n2 ... -nk)
И возьмем частные производные в каждой из k n_i переменных:
dLambda/dn_i = P/n_i - l
и в л:
dLambda/dl = N - n1 -n2 ... -nk
полагая все частные производные = 0, получаем систему из k + 1 уравнений, а при их решении получим, что n1 = n2 = ... = nk
Некоторые полезные ссылки:
Множители Лагранжа
Оптимизация
person
Rob Lachlan
schedule
27.02.2009