Gegeben:
- Eine natürliche Zahl S .
- Eine Liste von N rationalen Gewichten W , die sich zu 1 summieren.
Geben Sie eine Liste L von N nicht negativen ganzen Zahlen zurück, so dass:
(1) sum(L) = S
(2) sum((S⋅W_i - L_i)^2) is minimal
Mit anderen Worten, approximieren Sie S⋅W_i
s mit ganzen Zahlen so genau wie möglich.
Beispiele:
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]
Regeln:
- Sie können ein beliebiges Eingabeformat verwenden oder nur eine Funktion bereitstellen, die die Eingabe als Argumente akzeptiert.
Hintergrund:
Dieses Problem tritt auf, wenn S verschiedener Arten von Gegenständen in verschiedenen Anteilen W i in Bezug auf die Arten angezeigt wird.
Ein weiteres Beispiel für dieses Problem ist die proportionale politische Repräsentation, siehe das Aufteilungsparadoxon . Die letzten beiden Testfälle sind als Alabama-Paradox bekannt.
Als Statistiker erkannte ich dieses Problem als äquivalent zu einem Problem bei der Identifizierung von Stichprobengrößen bei der Durchführung einer geschichteten Stichprobe. In dieser Situation möchten wir den Anteil jeder Schicht in der Stichprobe gleich dem Anteil jeder Schicht in der Bevölkerung machen. - @tomi
round(A + B) != round(A) + round(B)
eine kurze Lösung einen Einblick in die Vorgänge hier erfordert.
L[i] - S*W[i]
quadrierten Abstände anstelle von Regel 2 und Regel 3 zu minimieren . Dies würde sich annähern S*W[i]
.
[0 1 2 2]
ist eine andere mögliche Lösung für5 [0.1 0.2 0.3 0.4]