PHP之SplHeap堆詳解

來源:互聯網
上載者:User
堆(Heap)就是為了實現優先隊列而設計的一種資料結構,它是通過構造二元堆積(二叉樹的一種)實現。根節點最大的堆叫做最大堆或大根堆,根節點最小的堆叫做最小堆或小根堆。二元堆積還常用於排序(堆排序)。SplHeap 是一個抽象類別,實現了Iterator , Countable介面。最大堆(SplMaxHeap)和最小堆(SplMinHeap)就是繼承它實現的,可以在PHP程式中直接使用。

類摘要:

abstract SplHeap implements Iterator , Countable {    // 建立一個空堆    public __construct ( void )    // 比較兩個節點的大小    abstract protected int compare ( mixed $value1 , mixed $value2 )    // 返回堆節點數    public int count ( void )    // 返回迭代指標指向的節點    public mixed current ( void )    // 從堆頂部提取一個節點並重建堆    public mixed extract ( void )    // 向堆中添加一個節點並重建堆    public void insert ( mixed $value )    // 判斷是否為空白堆    public bool isEmpty ( void )    // 返回迭代指標指向的節點的鍵    public mixed key ( void )    // 迭代指標指向下一節點    public void next ( void )    // 恢複堆    public void recoverFromCorruption ( void )    // 重設迭代指標    public void rewind ( void )    // 返回堆的頂部節點    public mixed top ( void )    // 判斷迭代指標指向的節點是否存在    public bool valid ( void )}


例子說明:

<?php/**   * 實現一個自己的最大堆 *   * @author 瘋狂老司機 */ class iMaxHeap extends SplHeap {    /**     * 實現compare抽象方法,使用關聯陣列的值進行比較排序     * SplMaxHeap不能滿足我們的需求     */    public function compare($array1, $array2) {        $values1 = array_values($array1);        $values2 = array_values($array2);        if ($values1[0] === $values2[0]) return 0;        return $values1[0] < $values2[0] ? -1 : 1;    }}$heap = new iMaxHeap();$heap->insert(array ('a' => 12));$heap->insert(array ('b' => 20));$heap->insert(array ('c' => 23));$heap->insert(array ('d' => 32));$heap->insert(array ('e' => 15));$heap->insert(array ('f' => 17));$heap->insert(array ('g' => 31));$heap->insert(array ('h' => 11));$heap->insert(array ('i' => 18));$heap->insert(array ('j' => 24));var_dump($heap->top());while ($heap->valid()) {    $cur = $heap->current();    list ($team, $score) = each($cur);    echo $team . ': ' . $score . '<br/>';    $heap->next();}?>

以上輸出:

array (size=1)
'd' => int 32
d: 32
g: 31
j: 24
c: 23
b: 20
i: 18
f: 17
e: 15
a: 12
h: 11

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.