最近我需要从列表中加权随机选择元素,无论是否有替换.虽然有未知加权选择的众所周知和良好的算法,有些用于无替换的加权选择(例如修改算法),我找不到任何好的算法用于替换加权选择.我也想避免使用resevoir方法,因为我选择了列表中的一小部分,这个小部分足够小以容纳在内存中.
有没有人对这种情况下的最佳方法有任何建议?我有自己的解决方案,但我希望找到更高效,更简单或两者兼而有之的方法.
任何人都可以为轮盘选择功能提供一些伪代码吗?我该如何实现这个:

我真的不明白如何阅读这个数学符号.我从未接受过任何概率或统计数据.
roulette-wheel-selection genetic-algorithm evolutionary-algorithm
如何根据普通语音中的使用频率随机生成字母?
任何伪代码都很受欢迎,但Java中的实现会非常棒.否则只是朝正确的方向戳一下会很有帮助.
注意:我不需要生成使用频率 - 我确信我可以很容易地查看它.
假设它给出了一组具有不同区域的矩形,并且一些矩形可能重叠.目标是在矩形区域之间生成均匀的随机点.
Rectangle被定义为一对两点:
我在不重叠矩形之间均匀分布随机点的策略是, - 根据区域随机选择一个矩形(现有解决方案):
for(int i = 0; i < rectangles.length; i++) {
int area = (rectangles[i].x2 - rectangles[i].x1) *
(rectangles[i].y1 - rectangles[i].y2);
if(rand.nextInt(total + area) >= total) {
selected = i;
break;
}
total += area;
}
Run Code Online (Sandbox Code Playgroud)
然后在矩形内生成任意点:
但如果一些矩形可以重叠怎么办?