나는 아이템 세트를 던지기 위해 100 점을 얻었다. 각 항목은 다른 점 (비중)에 비례하여 비례적인 수의 점수를 받아야합니다. 일부 항목은 0의 가중치를 가질 수 있지만 일부 점수를 받아야합니다.가중치 항목간에 포인트를 분배하는 알고리즘은 무엇입니까?
각 항목에 5 점을 부여한 다음 비례하여 나머지 지점을 채우려고했지만 21 항목이있을 때 알고리즘이 0 항목을 하나의 항목에 할당합니다. 물론 처음에는 1 점을 나눠 줄 수는 있지만 101 점 이상은 문제가 남아 있습니다. 일반적으로이 알고리즘은 20 개 미만의 항목을 처리해야하지만 더 많은 항목을 처리 할 때 알고리즘이 강력하기를 원합니다. 나는 수레를 사용하여 알고
은/분수는 완벽 할 것이지만, 기본 시스템은 정수를 받아야합니다, 나는 루비에 구현됩니다 있지만 총, 100
이것은 프레임 워크/언어 무신론자해야합니다.
현재, 나는이 (의사 코드)이 :
total_weight = sum_of(items.weight)
if total_weight == 0 then
# Distribute all points equally between each item
items.points = 100/number_of_items
# Apply remaining points in case of rounding errors (100/3 == [33, 33, 34])
else
items.points = 5
points_to_dole_out = 100 - number_of_items * 5
for(item in items)
item.points += item.weight * total_weight/100
end
end
+1 : 나는 이와 같은 해결책을 타이핑하고있었습니다. –
남은 부분에서 여분의 포인트를 나눠주기 전에 모든 사람이 적어도 1 점을 지니고 있는지도 확인해야합니다. –
잘 부탁드립니다. 그 요구 사항을 놓쳤습니다. 편집 –