加权随机算法改良版

Posted hualou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了加权随机算法改良版相关的知识,希望对你有一定的参考价值。

技术图片

技术图片

func (this *LoadBalance) SelectByWeightBetter(ip string) *HttpServer {
    rand.Seed(time.Now().UnixNano())
    sumList := make([]int, len(this.Servers)) //this.servers是服务器列表
    sum := 0
    for i := 0; i < len(this.Servers); i++ {
        sum += this.Servers[i].Weight //如果是5,7,9权重之和为5 12 21,分三个区间[0:5) [5:12) [12,21) 0-20的随机数落在哪个区间就代表当前随机是哪个权重
        sumList[i] = sum   //生成权重区间列表

    }
    _rand := rand.Intn(sum)
    for index, value := range sumList {
        if _rand < value { //因为sumList是递增的,而且长度等于this.Servers所以遍历它比较随机数落在哪个区间就可以得到当前的权重是哪个
            return this.Servers[index]
        }
    }
    return this.Servers[0]
}

加权随机算法单独实现

package main
import "fmt"
import "time"
import "math/rand"

func main() {
    a := make([]int,0)
    a = append(a,2,3,5)
    sum := 0
    b := make([]int,len(a))
    for i,v := range a{
        sum += v
        b[i] = sum
    }
    rand.Seed(time.Now().UnixNano())
    _rand := rand.Intn(sum)
    fmt.Println(_rand)
    for index, value := range b {
        if _rand < value {
            fmt.Println(a[index])
            break
        }
    }




以上是关于加权随机算法改良版的主要内容,如果未能解决你的问题,请参考以下文章

负载均衡算法--加权随机法(Weight Random)

加权随机算法

加权随机算法实现负载均衡

Uva 11468 改良版AC自动机

Unity实用插件篇 ✨ | 游戏中的求概率插件WeightedRandomization加权随机化算法

Unity实用插件篇 ✨ | 游戏中的求概率插件WeightedRandomization加权随机化算法