Алгоритм расчета взвешенного коэффициента распределения

Вот проблема, с которой я сталкиваюсь. У меня есть несколько предметов. У меня тогда есть различное количество ведер с весом (между 0 и 1), прикрепленным к ним. Я пытаюсь рассчитать процент предметов, которые должны идти в каждом ведре.

Например, скажем, у меня есть 20 предметов и 3 ведра:

  • B1 - вес: 0,5
  • B2 - вес: 0,5
  • B3 - вес: 0,25

Процент будет тогда:

  • B1 - 40% предметов = 8 предметов
  • B2 - 40% товаров = 8 товаров
  • B3 - 20% предметов = 4 предмета

Процент должен добавить к 100%, чтобы все предметы были распределены в ведра. В приведенном выше примере у B1 и B2 должно быть в два раза больше предметов, чем у B3, поскольку их вес вдвое больше, чем у B3; но когда все 3 ведра собраны вместе, фактический процент предметов, которые получает B1, составляет 40%.

Есть ли алгоритм для этого или кто-нибудь из вас знает, как его решить?

2 ответа

Решение

Суммируйте веса из всех ведер, затем разделите вес каждого ведра на эту сумму, чтобы получить процентную долю от общего количества.

Я думаю, что вы можете просто разделить вес каждого ведра на общий вес всех предметов, чтобы найти процент предметов, которые должно нести каждое ведро.

Тем не менее, существует небольшая проблема, если количество предметов и весы не делятся поровну. Для примера рассмотрим следующий сценарий:

B1 - weight: 0.15
B2 - weight: 0.15
B3 - weight: 0.70

И давайте предположим, что есть 23 пункта.

Затем мы можем вычислить количество предметов, которые должны быть выделены для каждого ведра, просто умножив долю общего веса на общее количество предметов:

B1 - weight: 0.15, 3.45 items
B2 - weight: 0.15, 3.45 items
B3 - weight: 0.70, 16.1 items

Один алгоритм, который мог бы решить эту проблему с дробным сегментом, состоял бы в том, чтобы вычислить количество элементов для каждого сегмента, по одному за раз, и затем перенести остаток на следующий расчет. Итак, в этом примере мы бы сделали это:

B1 - 3.45 items, keep 3, rollover 0.45
B2 - 3.45 items + 0.45 = 3.9 items, keep 3, rollover 0.9
B3 - 16.1 items + 0.9 = 17 items (whole number, and last bucket)
Другие вопросы по тегам