二、算法实现
带权轮询算法实现时,首先需要确定的是当前权值随着选择次数的变化应该如何变化,即当前权值与集合扫描次数的函数。常见的函数关系有线性关系、线性最大公约数关系、幂函数关系等。下面是线性最大公约数关系的算法实现:
int
value_round_select(S)
{
i = -1;
cv = 0;
while (true) {
i = (i + 1) mod n;
if (i == 0) {
cv = cv - gcd(S);
if (cv <= 0) {
cv = max(S);
if (cv == 0) {
return NULL;
}
}
}
if (W(Si) >= cw) {
return Si;
}
}
}
基中:S为集合,Si为集合中下标为i的元素,cv为当前权值,gcd(S)为集合S中元素的最大公约数,max(S)为集合中元素最大权值
参考: blog.163.com/tianle_han/blog/static/661782620119165645590/
参考: blog.163.com/tianle_han/blog/static/661782620119165645590/