2017-02-01 2 views
0

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

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

  • В1 - вес: 0,5
  • В2 - вес: 0,5
  • В3 - вес: 0,25

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

  • B1 - 40% изделий = 8 предметы
  • В2 - 40% из пунктов = 8 пунктов
  • B3 - 20% из пунктов = 4 шт

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

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

ответ

1

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

+0

Отлично, я знал, что это было что-то простое, но я просто рисовал пробел. Этот метод работает по мере необходимости. – msbware

3

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

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

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) 
Смежные вопросы