我正在寻找一种权重随机选择算法,具有与别名方法类似的特性,只是选定后会将项目从集合中删除。
例如,我有一个袋子,其中产生:
- 70% 的概率为红色弹珠。 - 10% 的概率为绿色弹珠。 - 20% 的概率为蓝色弹珠。
我抽出一个红色弹珠。现在红色弹珠已经被移除,所以我认为这个袋子现在会产生:
- 33% 的概率为绿色弹珠。 - 66% 的概率为蓝色弹珠。
我相信您可以预先计算每个可能概率表的树形结构,因此样本仍然为 O(1)。是否有更聪明的算法来实现带有移除功能的常数时间加权选择?
例如,我有一个袋子,其中产生:
- 70% 的概率为红色弹珠。 - 10% 的概率为绿色弹珠。 - 20% 的概率为蓝色弹珠。
我抽出一个红色弹珠。现在红色弹珠已经被移除,所以我认为这个袋子现在会产生:
- 33% 的概率为绿色弹珠。 - 66% 的概率为蓝色弹珠。
我相信您可以预先计算每个可能概率表的树形结构,因此样本仍然为 O(1)。是否有更聪明的算法来实现带有移除功能的常数时间加权选择?