#random #distinct #unique #pick #choose

rdeck

一个简单的用于选择不同随机元素的库

1 个不稳定版本

0.2.0 2023年12月27日

#1366 in 算法

MIT 许可证

10KB
186

rdeck:一个用于随机选择不同值的独特算法

用法

大多数常见用例应该通过在范围或切片上调用 to_deck 来覆盖。

一旦你有牌组,只需调用 deck.draw()(或 try_draw() 如果有可能在牌组中耗尽元素)。

为什么

假设你试图选择两个随机整数,并且希望它们是

  1. 不同的
  2. 均匀分布的
  3. 在常数时间内生成

有许多简单的方法,但它们都有问题

  • 如果它们相等,则增加一个(违反了 #2)
  • 如果它们相等,则再次调用 rng(违反了 #3)
  • 生成一个列表,从该列表中随机选择,删除选中的项目,再次随机选择(违反了 #3)

如何

基本原理是,而不是有一个尚未被选中的项目的列表,你有一个已选项目的列表。

这意味着内存和 CPU 复杂度与被选元素的数目成正比,而不是潜在元素的数目。

这也使得将牌组重置到其原始状态变得非常简单。

实际上,只有 IntDeck 执行此操作,其他所有内容都是建立在 IntDeck 之上的。

依赖项

~50KB