Данный:
- Натуральное число S .
- Список из N рациональных весов W , сумма которых равна 1.
Вернуть список L из N неотрицательных целых чисел, такой что:
(1) sum(L) = S
(2) sum((S⋅W_i - L_i)^2) is minimal
Другими словами, приближайте S⋅W_i
s с целыми числами как можно ближе.
Примеры:
1 [0.4 0.3 0.3] = [1 0 0]
3 [0 1 0] = [0 3 0]
4 [0.3 0.4 0.3] = [1 2 1]
5 [0.3 0.4 0.3] = [2 2 1] or [1 2 2] but not [1 3 1]
21 [0.3 0.2 0.5] = [6 4 11]
5 [0.1 0.2 0.3 0.4] = [1 1 1 2] or [0 1 2 2]
4 [0.11 0.3 0.59] = [1 1 2]
10 [0.47 0.47 0.06] = [5 5 0]
10 [0.43 0.43 0.14] = [4 4 2]
11 [0.43 0.43 0.14] = [5 5 1]
Правила:
- Вы можете использовать любой формат ввода вообще или просто предоставить функцию, которая принимает входные данные в качестве аргументов.
Фон:
Эта проблема возникает при отображении S различных типов элементов в различных пропорциях W i относительно типов.
Другим примером этой проблемы является пропорциональное политическое представительство, см. Парадокс распределения . Последние два тестовых случая известны как парадокс Алабамы.
Как статистик, я признал эту проблему эквивалентной проблеме, возникающей при определении размеров выборки при проведении стратифицированной выборки. В этой ситуации мы хотим сделать пропорцию каждого слоя в выборке равной доле каждого слоя в популяции. - @tomi
round(A + B) != round(A) + round(B)
что короткое решение требует понимания того, что здесь происходит.
L[i] - S*W[i]
квадратов расстояний , вместо правила 2 и правила 3. Это будет приблизительно S*W[i]
.
[0 1 2 2]
есть еще одно возможное решение для5 [0.1 0.2 0.3 0.4]