当前位置:首页 > PHP

php堆实现

2026-02-14 11:16:01PHP

PHP 堆实现

在 PHP 中,堆(Heap)是一种特殊的树形数据结构,通常用于实现优先队列。堆可以分为最大堆和最小堆,最大堆的父节点值大于或等于子节点值,最小堆的父节点值小于或等于子节点值。

使用 SplHeap 类

PHP 提供了内置的 SplHeap 类来实现堆数据结构。SplHeap 是一个抽象类,需要继承并实现 compare 方法来定义堆的类型(最大堆或最小堆)。

class MaxHeap extends SplHeap {
    protected function compare($value1, $value2) {
        return $value1 - $value2;
    }
}

class MinHeap extends SplHeap {
    protected function compare($value1, $value2) {
        return $value2 - $value1;
    }
}

示例代码

以下是一个使用 MaxHeap 的示例:

$heap = new MaxHeap();
$heap->insert(10);
$heap->insert(5);
$heap->insert(15);

echo $heap->extract(); // 输出 15
echo $heap->extract(); // 输出 10
echo $heap->extract(); // 输出 5

手动实现堆

如果需要手动实现堆,可以使用数组来模拟堆结构。以下是一个最小堆的手动实现示例:

php堆实现

class MinHeapManual {
    private $heap = [];

    public function insert($value) {
        $this->heap[] = $value;
        $this->heapifyUp(count($this->heap) - 1);
    }

    public function extractMin() {
        if (count($this->heap) === 0) {
            return null;
        }
        $min = $this->heap[0];
        $last = array_pop($this->heap);
        if (count($this->heap) > 0) {
            $this->heap[0] = $last;
            $this->heapifyDown(0);
        }
        return $min;
    }

    private function heapifyUp($index) {
        $parent = floor(($index - 1) / 2);
        if ($index > 0 && $this->heap[$index] < $this->heap[$parent]) {
            $this->swap($index, $parent);
            $this->heapifyUp($parent);
        }
    }

    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;
    }
}

使用示例

$heap = new MinHeapManual();
$heap->insert(10);
$heap->insert(5);
$heap->insert(15);

echo $heap->extractMin(); // 输出 5
echo $heap->extractMin(); // 输出 10
echo $heap->extractMin(); // 输出 15

性能考虑

  • SplHeap 是 PHP 内置的堆实现,性能较高,适合大多数场景。
  • 手动实现堆可以更灵活地定制功能,但性能可能不如内置实现。

通过以上方法,可以在 PHP 中高效地实现堆数据结构。

标签: php
分享给朋友:

相关文章

php实现分页

php实现分页

PHP实现分页的基本方法 使用LIMIT和OFFSET进行数据库查询分页。通过计算当前页码和每页显示数量,动态生成SQL语句。 $page = isset($_GET['page']) ? (int…

php实现文件下载

php实现文件下载

PHP实现文件下载的方法 通过PHP实现文件下载功能,可以采用多种方式,以下是几种常见的实现方法: 使用header()函数强制下载 设置HTTP头信息,强制浏览器下载文件而非直接打开: $fi…

php实现

php实现

PHP 实现的基本方法 PHP 是一种服务器端脚本语言,广泛用于 Web 开发。以下是 PHP 实现的一些常见方法。 变量与数据类型 PHP 变量以 $ 开头,支持多种数据类型: $nam…

php 实现登录

php 实现登录

PHP 登录功能实现 使用 PHP 实现登录功能通常需要结合数据库验证和会话管理。以下是一个基本的登录实现流程: 数据库准备 创建用户表存储用户名和密码(建议使用哈希加密): CREATE TAB…

php验证码的实现

php验证码的实现

PHP 验证码实现方法 使用 GD 库生成基础验证码 创建画布并生成随机字符串作为验证码内容: session_start(); $width = 120; $height = 40; $image…

php搜索功能实现

php搜索功能实现

实现基本的PHP搜索功能 使用MySQL数据库和PHP实现简单的关键词搜索功能。需要确保数据库中有可供搜索的表和数据。 // 连接数据库 $conn = new mysqli('localhost'…