H_ello可爱的人,
我的程序是作为可扩展的网络框架编写的。它由几个作为单独程序运行的组件组成。可以动态添加各个组件的其他实例。
组件最初在中央单元处注册IP和端口。该管理器定期发送到可以找到其他组件的组件。但不仅如此,每个组件都被赋予了与其他组件相比应该解决的频率的重量/概率/机会。
作为示例:1Master,组件A,B,C 所有在Master注册的组件,Master发送给A:[B(127.0.0.1:8080, 3 ); C(127.0.0.1:8081。 5 )]
A循环运行并从此数据反复计算通信伙伴。
因此,A应该以3比5的比例请求B和C.每个最终获得的请求数取决于运行性能。这与比率有关。
当然,数字3和5会定期出现并动态变化。它不是3个组件,但可能有数百个。
我的想法是:
添加3和5.计算1到8之间的随机数。如果大于3,则取C else B ....
但我认为这不是一个干净的解决方案。在每个循环中可能计算密集。此外,管理和数据结构很昂贵。另外,我认为STL的随机数不够平衡。 有人可能会给我一个提示,我是如何干净地实现这个或者有人有经验或有想法吗?
谢谢你的每一个案例;)
答案 0 :(得分:1)
我有个想法: 为什么不尝试累积概率?
1。)生成均匀分布的随机数。 2.)遍历列表,直到被访问元素的累积概率大于随机数。
看看这个(Java代码,但也可以在C ++中工作),(你暗示你使用C ++非常好!!!)
double p = Math.random();
double cumulativeProbability = 0.0;
for (Item item : items) {
cumulativeProbability += item.probability();
if (p <= cumulativeProbability) {
return item;
}
}