当前位置:首页 > PHP

php堆实现

2026-01-29 13:10:11PHP

PHP 堆(Heap)实现方法

PHP 提供了多种方式实现堆数据结构,以下是常见方法:

使用 SplHeap 类

PHP 标准库(SPL)提供了 SplHeap 抽象类用于堆实现,需继承并实现 compare 方法:

class MyHeap extends SplHeap {
    protected function compare($value1, $value2) {
        return $value1 - $value2; // 最小堆实现
    }
}

$heap = new MyHeap();
$heap->insert(4);
$heap->insert(8);
$heap->insert(1);
echo $heap->extract(); // 输出1(最小元素)

使用 SplMinHeap/SplMaxHeap

php堆实现

SPL 还提供具体的最小堆和最大堆实现类:

$minHeap = new SplMinHeap();
$minHeap->insert(3);
$minHeap->insert(1);
echo $minHeap->extract(); // 输出1

$maxHeap = new SplMaxHeap();
$maxHeap->insert(3);
$maxHeap->insert(1);
echo $maxHeap->extract(); // 输出3

数组模拟堆

php堆实现

可通过数组配合特定索引计算模拟堆结构:

function heapify(&$arr, $n, $i) {
    $largest = $i;
    $left = 2 * $i + 1;
    $right = 2 * $i + 2;

    if ($left < $n && $arr[$left] > $arr[$largest])
        $largest = $left;

    if ($right < $n && $arr[$right] > $arr[$largest])
        $largest = $right;

    if ($largest != $i) {
        $swap = $arr[$i];
        $arr[$i] = $arr[$largest];
        $arr[$largest] = $swap;
        heapify($arr, $n, $largest);
    }
}

function buildHeap(&$arr, $n) {
    for ($i = floor($n / 2) - 1; $i >= 0; $i--)
        heapify($arr, $n, $i);
}

优先队列实现

结合 SplPriorityQueue 可实现带优先级的堆结构:

$pq = new SplPriorityQueue();
$pq->insert('Task 1', 3);
$pq->insert('Task 2', 1);
$pq->insert('Task 3', 2);
echo $pq->extract(); // 输出Task 1(最高优先级)

性能比较

  • SplHeap 系列类提供O(log n)的插入/删除复杂度
  • 数组模拟堆需要手动维护堆属性
  • 优先队列适合需要关联优先级的场景

应用场景

  • 任务调度系统
  • 图算法(如Dijkstra)
  • 数据流的中位数计算
  • 游戏中的AI决策系统

对于需要自定义比较逻辑的场景,继承 SplHeap 是最灵活的方式;若只需简单数值比较,可直接使用 SplMinHeapSplMaxHeap

标签: php
分享给朋友:

相关文章

php实现文件上传

php实现文件上传

PHP 文件上传实现方法 在 PHP 中实现文件上传需要处理 HTML 表单和服务器端脚本。以下是详细步骤: 创建 HTML 表单 使用 enctype="multipart/form-data"…

php实现增删改查

php实现增删改查

以下是在PHP中实现增删改查(CRUD)操作的详细方法,以MySQL数据库为例: 数据库连接配置 创建config.php文件存储数据库连接信息: <?php $host = 'localh…

php实现分类

php实现分类

PHP实现分类的方法 数据库设计 创建分类表时,通常需要包含id、名称、父级id等字段。父级id用于实现多级分类结构。 CREATE TABLE categories ( id INT AU…

php 实现锁

php 实现锁

PHP 实现锁的常见方法 文件锁(flock) 利用 flock 函数对文件进行独占锁定,适用于单机环境。 $fp = fopen("lockfile.lock", "w+"); if (flock…

php 插件实现

php 插件实现

PHP 插件实现方法 PHP 插件可以通过多种方式实现,具体取决于插件的用途和功能需求。以下是一些常见的实现方法: 使用钩子(Hooks)和过滤器(Filters) 钩子和过滤器是一种常见的插件架…

php实现区块链

php实现区块链

PHP 实现区块链的基本步骤 PHP 可以用于实现一个简单的区块链系统,以下是关键步骤和代码示例: 区块类实现 创建一个 Block 类来表示区块链中的单个区块: class Block {…