Open cch123 opened 6 years ago
话说为什么不用 Fisher–Yates shuffle 洗牌算法呢?
func Shuffle(slice []int) {
for i := len(slice) - 1; i >= 0; i-- {
j := rand.Intn(i + 1)
slice[i], slice[j] = slice[j], slice[i]
}
}
@imhuster ,
@imhuster ,
1. 原作者大概觉得这个洗牌算法就已经均匀了 2. fisher yates 在标准库内就有,不熟悉标准库呗
哦哦,理解了。
如果不洗牌,直接取呢?洗牌那不是增加是时间消耗吗
@chazyu1996 ,洗牌是应该考虑到如果取第一个节点失败了会继续取第二个,直接取的话,那失败了可能导致数组里后面那个节点的流量变大
update.2019.12.04 仔细想了想,理论上是可以不洗牌的,用互质数的性质来做依次遍历就可以完成伪随机的功能了
http://xargin.com/load-balance/