sysread / php-skewheap
可合并优先队列
Requires (Dev)
- phpunit/phpunit: ^9.2
This package is auto-updated.
Last update: 2024-09-08 23:41:47 UTC
README
名称
SkewHeap - 可合并优先队列
概要
use sysread\SkewHeap\SkewHeap;
$heap = new SkewHeap;
foreach ($tasks as $task) {
$heap->put($task);
}
while (!$heap->is_empty()) {
my $next_task = $heap->take();
do_stuff_to($next_task);
}
描述
斜堆是一种轻量级优先队列,以其能够快速与其他堆合并的能力而闻名。
安装
composer require sysread/php-skewheap
用法
构造函数
接受一个可选参数,指定一个用于比较堆中条目并返回 -1、0 或 1 的函数,分别表示第一个条目具有更高的、相等的或较低的优先级。如果未指定或为 null,则使用简单的数值比较,较低值具有更高的优先级。
可以通过构造函数将任意数量的源堆作为额外参数传递,以从其中初始化斜堆。
$heap = new SkewHeap;
$heap = new SkewHeap(function($a, $b) {
return $a - $b;
});
$heap = new SkewHeap(null, $heap1, $heap2, ...);
方法
size()
返回堆中的项目数量。
is_empty()
如果队列中至少有一个项目,则返回 true。
put(...$items)
将任意数量的项目插入到队列中。返回新的队列大小。
peek()
返回队列中的顶部项目,而不将其移除。如果队列为空,则返回 null。
take()
移除并返回队列中的下一个项目。如果队列为空,则返回 null。
drain()
移除并返回队列中所有项目的数组。
explain()
打印堆结构的可视化解释,用于调试。
作者
Jeff Ober sysread@fastmail.fm
许可证
版权 (c) 2020 Jeff Ober
特此授予任何获得本软件及其相关文档文件(“软件”)副本的任何人,免费使用软件的权利,不受任何限制,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许向软件提供者提供软件的人这样做,前提是以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何形式的保证,无论是明示的、暗示的还是隐含的,包括但不限于适销性、特定目的适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论该索赔、损害或其他责任是基于合同、侵权或其他方式引起的,无论是与软件或软件的使用或其他交易有关还是由此产生。