当前位置:首页 > PHP

php堆实现

2026-02-28 10:26:02PHP

PHP 堆(Heap)实现方法

堆是一种特殊的树形数据结构,通常用于实现优先队列。PHP 提供了内置的 SplHeap 类,同时也支持通过数组手动实现堆。

php堆实现

使用 SplHeap

PHP 的 SPL(Standard PHP Library)提供了 SplHeap 抽象类,可以快速实现最大堆或最小堆。

php堆实现

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

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

// 示例用法
$minHeap = new MinHeap();
$minHeap->insert(3);
$minHeap->insert(1);
$minHeap->insert(4);
echo $minHeap->extract(); // 输出 1

手动实现堆(基于数组)

如果需要更灵活的堆实现,可以通过数组手动构建:

class BinaryHeap {
    private $heap;

    public function __construct() {
        $this->heap = [];
    }

    // 插入元素并调整堆
    public function insert($item) {
        $this->heap[] = $item;
        $this->heapifyUp(count($this->heap) - 1);
    }

    // 提取堆顶元素
    public function extract() {
        if (count($this->heap) === 0) {
            return null;
        }

        $root = $this->heap[0];
        $last = array_pop($this->heap);

        if (count($this->heap) > 0) {
            $this->heap[0] = $last;
            $this->heapifyDown(0);
        }

        return $root;
    }

    // 向上调整(用于插入)
    private function heapifyUp($index) {
        $parent = ($index - 1) >> 1;

        while ($index > 0 && $this->heap[$parent] > $this->heap[$index]) {
            $this->swap($parent, $index);
            $index = $parent;
            $parent = ($index - 1) >> 1;
        }
    }

    // 向下调整(用于提取)
    private function heapifyDown($index) {
        $left = 2 * $index + 1;
        $right = 2 * $index + 2;
        $smallest = $index;

        if ($left < count($this->heap) && $this->heap[$left] < $this->heap[$smallest]) {
            $smallest = $left;
        }

        if ($right < count($this->heap) && $this->heap[$right] < $this->heap[$smallest]) {
            $smallest = $right;
        }

        if ($smallest !== $index) {
            $this->swap($index, $smallest);
            $this->heapifyDown($smallest);
        }
    }

    // 交换元素
    private function swap($i, $j) {
        $temp = $this->heap[$i];
        $this->heap[$i] = $this->heap[$j];
        $this->heap[$j] = $temp;
    }
}

性能对比

  • SplHeap:适合快速实现标准堆操作,但灵活性较低。
  • 手动实现:适合需要自定义比较逻辑或特殊调整的场景。

应用场景

  1. 优先队列:任务调度系统。
  2. Top K 问题:快速获取最大或最小的 K 个元素。
  3. 堆排序:时间复杂度为 O(n log n) 的排序算法。

标签: php
分享给朋友:

相关文章

php实现队列

php实现队列

PHP实现队列的方法 队列是一种先进先出(FIFO)的数据结构,PHP可以通过多种方式实现队列功能。 使用数组模拟队列 PHP数组可以模拟队列的基本操作,通过array_push和array_shi…

基于php的设计与实现

基于php的设计与实现

PHP 设计与实现的关键要素 环境搭建与框架选择 PHP开发需配置服务器环境(如Apache/Nginx)、PHP版本(建议7.4+)及数据库(MySQL/MariaDB)。主流框架包括Laravel…

php实现定时

php实现定时

PHP 实现定时任务的方法 PHP 本身是脚本语言,通常需要借助外部工具或框架实现定时任务。以下是几种常见方法: 使用 Cron 任务 Linux 系统自带的 Cron 是常用的定时任务工具。通过编…

php mvc实现

php mvc实现

PHP MVC 实现步骤 模型(Model)层 模型负责数据处理和业务逻辑,通常与数据库交互。创建一个基类模型,其他具体模型继承它。 class Model { protected $db;…

php 实现mvc

php 实现mvc

PHP 实现 MVC 架构的方法 MVC(Model-View-Controller)是一种常见的软件设计模式,用于分离业务逻辑、用户界面和用户输入。以下是 PHP 实现 MVC 架构的关键步骤:…

php https实现

php https实现

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