3 个不稳定版本

新版本 0.2.1 2024年8月8日
0.1.1 2024年8月4日
0.1.0 2024年7月21日

22科学

Download history 60/week @ 2024-07-15 62/week @ 2024-07-22 63/week @ 2024-07-29 201/week @ 2024-08-05

386 次每月下载

MIT 许可证

43KB
910

AbstractPriorityQueue

为了创建一套统一的函数,所有类型的优先队列都使用这些函数,即使实现者所做的不仅仅是普通的 PriorityQueue,例如 IsraeliQueue。

  • 创建一个空的副本(这是通过 new 实现的,因为要保持以色列队列中如何组合优先级等部分)
  • 查看下一个项目和它的优先级
  • 以指定优先级入队一个新项目
  • 以相同的优先级入队多个项目
  • 出队下一个项目及其优先级
  • 出队多个项目
    • 它将尝试获取队列中元素的最小值和 around_how_many
    • 如果它超过这个值,只要它小于 hard_limit,它可能会给出更多的值
  • 一个迭代器,遍历所有项目,长度为一切
  • 查询长度
  • 查询是否为空
  • 将所有内容排入一个向量

以色列队列

这并不是真正的以色列队列,因为我们有一个口令而不是通过迭代查找朋友。但通过使用具有泛型的特性和避免迭代。

项目必须实现 Friendly,这为该项目属于特定朋友组提供了口令。

这样我们就有了常规优先队列用于口令和口令如何转换为非空项目列表。

当新项目加入当前等待的朋友组时,优先级如何组合的规范是可变的。通常描述为任何朋友的最高优先级。有时是总和。我们不会承诺使用其中之一,而是将执行此操作的功能作为队列本身的一部分。默认使用最大值,但您可以更改它。

嵌套队列

考虑桶队列,每个桶存储相同优先级的项。而在这里,我们有一个粗粒度的优先级,它是原始优先级的单调函数。现在,各个桶是实现了 AbstractPriorityQueue 的东西,嵌套队列的 AbstractPriorityQueue 操作相应地使用各个桶上的操作

无优先级,普通优先级

无优先级

如果优先级不重要,则 VecDequeue 的透明包装器实现这些操作并忽略优先级

普通优先级

来自 priority_queue crate 的 PriorityQueue 也实现了该特剧行

依赖项

~1–1.5MB
~23K SLoC