从给定月份列表中按比例划分月份

时间:2012-02-22 11:37:55

标签: algorithm optimization

我获得了一个月份列表(TOTAL_NUM_MONTHS),从这个列表中我需要按比例选择12个月。到目前为止我有以下算法:

IF TOTAL_NUM_MONTHS<12 THEN
   STEP = 1
ELSE IF (TOTAL_NUM_MONTHS % 12 == 0) THEN
   STEP = TOTAL_NUM_MONTHS / 12
ELSE
   STEP = ???

因此,如果总月数小于12,我将选择所有这些,如果它可以被12整除,那么我将选择步长等于TOTAL_NUM_MONTHS/12

问题:如果总月数不能归为12,该怎么办?如何计算步骤,以便从给定的月份列表中按比例选择12个月?

1 个答案:

答案 0 :(得分:1)

也许你应该为每次迭代采取一个可变长度的步骤,例如:

step(i) = step(i-1) + NUM_MONTHS/12.0step(0) = 0.0 [注意:步骤(i)是浮点数而不是整数]

使用floor(step(i))选择元素。 [假设在这里NUM_MONTHS > 12]

i是步数。您选择a[i] = floor(step(i))作为每个0 <= i < 12

的第i个元素

这个想法是创建一个单调递增的函数,统一分布。它与浮点数NUM_MONTHS/12大小相比没有更均匀。因此,您使用浮点计算它 - 然后使用floor(step(i))从中获取整数。

这种方法确保了两件事:

  1. 两次没有选择任何元素[因为NUM_MONTHS/12 > 1]
  2. 每两步之间的最大差异为1
  3. 另请注意,如果此NUM_STEPS % 12 == 0此方法衰减到您的else if并且行为相同。