1 个不稳定版本
0.2.0 | 2023年12月27日 |
---|
#1366 in 算法
10KB
186 行
rdeck:一个用于随机选择不同值的独特算法
用法
大多数常见用例应该通过在范围或切片上调用 to_deck 来覆盖。
一旦你有牌组,只需调用 deck.draw()
(或 try_draw()
如果有可能在牌组中耗尽元素)。
为什么
假设你试图选择两个随机整数,并且希望它们是
- 不同的
- 均匀分布的
- 在常数时间内生成
有许多简单的方法,但它们都有问题
- 如果它们相等,则增加一个(违反了 #2)
- 如果它们相等,则再次调用 rng(违反了 #3)
- 生成一个列表,从该列表中随机选择,删除选中的项目,再次随机选择(违反了 #3)
如何
基本原理是,而不是有一个尚未被选中的项目的列表,你有一个已选项目的列表。
这意味着内存和 CPU 复杂度与被选元素的数目成正比,而不是潜在元素的数目。
这也使得将牌组重置到其原始状态变得非常简单。
实际上,只有 IntDeck
执行此操作,其他所有内容都是建立在 IntDeck 之上的。
依赖项
~50KB