当前位置:首页 > 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

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

数组模拟堆

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

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

php实现购物车

php实现购物车

PHP实现购物车功能 购物车功能是电商网站的核心模块之一,通常涉及商品添加、删除、数量修改和结算等操作。以下是使用PHP实现购物车功能的几种方法。 使用Session存储购物车数据 Session…

php实现递归

php实现递归

递归的基本概念 递归是一种函数调用自身的技术,适用于解决可以分解为相同子问题的问题。在PHP中,递归需要明确的终止条件(基线条件),否则会导致无限循环。 递归实现阶乘 阶乘是经典的递归案例,n! =…

php 实现自动收货

php 实现自动收货

PHP 实现自动收货功能 自动收货功能通常用于电商系统,在订单超过一定时间未手动确认收货时自动完成订单。以下是实现方法: 数据库设计 需要订单表包含以下关键字段: CREATE TABLE…

git php实现

git php实现

Git 与 PHP 的集成实现 使用 PHP 执行 Git 命令 通过 PHP 的 exec()、shell_exec() 或 passthru() 函数可以直接调用 Git 命令,适用于服务器端操作…

php记住密码怎么实现

php记住密码怎么实现

使用Cookie实现记住密码功能 在PHP中,可以通过设置Cookie来记住用户的登录状态。以下是一个简单的实现方式: // 用户登录验证成功后 if ($login_success) {…