📅  最后修改于: 2023-12-03 15:36:59.318000             🧑  作者: Mango
加权随机是一种在给定一组元素和它们对应的权重的情况下,按照权重随机选择其中一个元素的算法。在实际开发中,加权随机可以被用来实现多种需求,如随机推荐、抽奖等。
下面是一个简单的 C# 实现,我们使用了一个 List
来保存元素和权重的对应关系,然后利用 System.Random 生成随机数,在 O(n) 的时间内计算出选中的元素。
using System;
using System.Collections.Generic;
public class WeightedRandom<T>
{
private readonly List<(T, int)> _items;
public WeightedRandom(List<(T, int)> items)
{
_items = items;
}
public T GetRandomItem()
{
int totalWeight = 0;
foreach ((T item, int weight) in _items)
{
totalWeight += weight;
}
Random random = new Random();
int selectedWeight = random.Next(totalWeight);
foreach ((T item, int weight) in _items)
{
if (selectedWeight < weight)
{
return item;
}
selectedWeight -= weight;
}
throw new InvalidOperationException("No item selected");
}
}
我们可以利用上述实现来实现一个简单的抽奖程序,如下所示:
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
List<(string, int)> rewards = new List<(string, int)>
{
("iPhone 12", 1),
("Macbook Pro", 3),
("Apple Watch", 6),
("AirPods Pro", 10),
("$50 Coupon", 100)
};
WeightedRandom<string> random = new WeightedRandom<string>(rewards);
Console.WriteLine("Congratulations! You won a " + random.GetRandomItem());
}
}
这个程序会从 rewards
列表中随机选择一个元素作为奖品,根据该元素对应的权重,高权重元素会被选中的概率更大。
本文介绍了加权随机的概念及实现方法。通过加权随机,我们可以实现多种需求,如随机推荐、抽奖等。