sysread / php-skewheap

可合并优先队列

v0.3 2020-07-08 14:08 UTC

This package is auto-updated.

Last update: 2024-09-08 23:41:47 UTC


README

build

名称

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

特此授予任何获得本软件及其相关文档文件(“软件”)副本的任何人,免费使用软件的权利,不受任何限制,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许向软件提供者提供软件的人这样做,前提是以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“原样”提供,不提供任何形式的保证,无论是明示的、暗示的还是隐含的,包括但不限于适销性、特定目的适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论该索赔、损害或其他责任是基于合同、侵权或其他方式引起的,无论是与软件或软件的使用或其他交易有关还是由此产生。