我获得了一个月份列表(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个月?
答案 0 :(得分:1)
也许你应该为每次迭代采取一个可变长度的步骤,例如:
step(i) = step(i-1) + NUM_MONTHS/12.0
,step(0) = 0.0
[注意:步骤(i)是浮点数而不是整数]
使用floor(step(i))
选择元素。 [假设在这里NUM_MONTHS > 12
]
i
是步数。您选择a[i] = floor(step(i))
作为每个0 <= i < 12
这个想法是创建一个单调递增的函数,统一分布。它与浮点数NUM_MONTHS/12
大小相比没有更均匀。因此,您使用浮点计算它 - 然后使用floor(step(i))
从中获取整数。
这种方法确保了两件事:
NUM_MONTHS/12 > 1
] 1
。另请注意,如果此NUM_STEPS % 12 == 0
此方法衰减到您的else if
并且行为相同。