权重设计介绍

相关产品

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;
    }
相关推荐
flying_1314几秒前
面试常问系列(一)-神经网络参数初始化-之-softmax
深度学习·神经网络·算法·机器学习·面试
蒟蒻小袁1 小时前
力扣面试150题-- 翻转二叉树
算法·leetcode·面试
养一只Trapped_beast1 小时前
【LeetCode】删除排序数组中的重复项 II
算法·leetcode·职场和发展
矢鱼1 小时前
单调栈所有模版(2)
算法
轮到我狗叫了1 小时前
力扣智慧思想小题,目录力扣.跳跃游戏(思想很重要)力扣.跳跃游戏II(还是思想)力扣.分发糖果力扣151.反转字符串中的单词力扣.轮转数组
数据结构·算法·leetcode
zxctsclrjjjcph2 小时前
【递归、搜索和回溯】递归、搜索和回溯介绍及递归类算法例题
开发语言·c++·算法·力扣
朱剑君2 小时前
排序算法——堆排序
算法·排序算法
某不知名網友2 小时前
linux_进程地址空间(虚拟地址空间)
java·linux·算法
bryant_meng2 小时前
【python】Calculate the Angle of a Triangle
开发语言·python·算法
纪元A梦2 小时前
贪心算法应用:最小反馈顶点集问题详解
java·算法·贪心算法