权重设计介绍

相关产品

RocketMQ

之前在阿里的 负载均衡 比赛中,就有这个算法,RocketMQ 中包含多种负载算法,其中 权重 算法就属于其中一种,也是最实用的一种。

奖励系统

经常会有许多活动、或则任务、当用户完成后,可以获得相关的奖励,当然可以是提前定死的几个、但如果想要 产出不同的 奖励的话,给每个物件配置相关的权重,就可以实现。

设计思路

例如存在这些数据

itemId weight

1 10

2 20

3 10

sum = 10 + 20 + 10

list = {10, 30, 40}

rand = 随机数(0,1)

weight = rand * sum

weight 属于 (0,10] => index = 0

weight 属于 (10,30] => index = 1

weight 属于 (30,40] => index = 2

Code

cs 复制代码
    public static int RandomByWeight(int[] weights)
    {
        int sum = 0;
        for (int i = 0; i < weights.Length; i++)
        {
            sum += weights[i];
        }

        // 权重全为0 则返回 -1
        if (sum == 0)
        {
            return -1;
        }

        int rand = Rand(sum);

        int sum = 0;
        for (int i = 0; i < weights.Length; i++)
        {
            sum += weights[i];
            if (rand <= sum)
            {
                return i;
            }
        }

        return -1;
    }
相关推荐
闪电麦坤9511 分钟前
数据结构:递归的种类(Types of Recursion)
数据结构·算法
Gyoku Mint1 小时前
机器学习×第二卷:概念下篇——她不再只是模仿,而是开始决定怎么靠近你
人工智能·python·算法·机器学习·pandas·ai编程·matplotlib
纪元A梦1 小时前
分布式拜占庭容错算法——PBFT算法深度解析
java·分布式·算法
px不是xp1 小时前
山东大学算法设计与分析复习笔记
笔记·算法·贪心算法·动态规划·图搜索算法
枫景Maple2 小时前
LeetCode 2297. 跳跃游戏 VIII(中等)
算法·leetcode
鑫鑫向栄2 小时前
[蓝桥杯]修改数组
数据结构·c++·算法·蓝桥杯·动态规划
鑫鑫向栄2 小时前
[蓝桥杯]带分数
数据结构·c++·算法·职场和发展·蓝桥杯
小wanga3 小时前
【递归、搜索与回溯】专题三 穷举vs暴搜vs回溯vs剪枝
c++·算法·机器学习·剪枝
天宫风子3 小时前
线性代数小述(一)
线性代数·算法·矩阵·抽象代数