当前位置:首页 > 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中实现搜索功能通常涉及数据库查询。以下是一个简单的实现方式,假设使用MySQL数据库: <?php // 连接数据库 $conn = new mysqli('loc…

php 实现自动收货

php 实现自动收货

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

php 登录实现

php 登录实现

PHP 登录实现 PHP 登录功能通常包括用户认证、会话管理和安全性措施。以下是实现 PHP 登录功能的关键步骤。 数据库准备 创建一个用户表存储用户信息,通常包括用户名、密码(加密存储)和其他必要…

php 实现接口

php 实现接口

PHP 实现接口的方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不包含具体的实现。类可以实现(implement)接口,并必须实现接口中定义的所有方法。 定义接口 接口通…

php实现的分页

php实现的分页

PHP 实现分页的方法 基本分页逻辑 分页的核心在于计算总页数、当前页码以及数据偏移量。假设每页显示 10 条数据: $current_page = isset($_GET['page']) ? (…

php https实现

php https实现

PHP 中实现 HTTPS 的方法 在 PHP 中实现 HTTPS 主要通过配置服务器和编写代码来确保通信的安全性。以下是几种常见的方法: 配置服务器支持 HTTPS 确保服务器已安装 SSL/T…