簡介
堆(英語:heap)是計算機(jī)科學(xué)中一類特殊的數(shù)據(jù)結(jié)構(gòu)的統(tǒng)稱振湾。堆通常是一個可以被看做一棵樹的數(shù)組對象杀迹。堆總是滿足下列性質(zhì):
堆中某個節(jié)點的值總是不大于或不小于其父節(jié)點的值;堆總是一棵完全二叉樹押搪。
將根節(jié)點最大的堆叫做最大堆或大根堆树酪,根節(jié)點最小的堆叫做最小堆或小根堆。常見的堆有二叉堆大州、斐波那契堆等续语。(以上內(nèi)容網(wǎng)上摘取,是不是看了之后一臉懵逼摧茴?還是看看代碼吧)
1.類摘要
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 )
}
從這個類的定義可以看出來绵载,這是一個抽象類,但是只有一個抽象實現(xiàn)需要方法compare苛白,啥意思呢娃豹?文檔的定義是: Compare elements in order to place them correctly in the heap while sifting up.翻譯過來就是比較元素,在篩選時候正確的放置其位置购裙,問題來了懂版,和誰比呢?
2.實例
<?php
namespace SPL;
class SPLHeap extends \SplHeap
{
protected function compare($value1, $value2)
{
return $value1 > $value2 ? -1 : 1;
}
}
$hp = new SPLHeap();
$hp->insert(1);
$hp->insert(9);
$hp->insert(7);
$hp->insert(7);
$hp->insert(5);
$hp->insert(11);
$hp->insert(55);
$hp->insert(55);
$hp->insert(20);
$hp->rewind();
foreach ($hp as $value) {
echo $value . "\n";
}
運行結(jié)果:從小到大排序輸出 1,5,7,9....
從上述例子可以發(fā)現(xiàn)compare函數(shù)的主要作用就是提供一個排序規(guī)則躏率,通過返回一個大于0或者小于0的數(shù)來排序躯畴,其他方法和鏈表差不多!
PHP SPL里面還有一個SplMinHeap和SplMaxHeap,即最小堆和最大堆薇芝,它們其實都是繼承的SplHeap蓬抄,方法基本上也一樣!