AI写作智能体 自主规划任务,支持联网查询和网页读取,多模态高效创作各类分析报告、商业计划、营销方案、教学内容等。 广告
# SplMinHeap(最小堆) > 注意,因为是`堆`实现,所以`rewind`方法是一个`no-op`没有什作用的操作,因为`头指针`始终指向`堆顶`,即`current`始终等于`top`,不像`List`只是游走指针,出队是会删除堆元素的,`extract`=`current + next`(current出队,从堆中删除) ## **例子:** ``` <pre class="calibre10">``` $obj<span class="token1">=</span><span class="token5">new</span> <span class="token4">SplMinHeap</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> $obj<span class="token1">-</span><span class="token1">></span><span class="token4">insert</span><span class="token3">(</span> <span class="token6">4</span> <span class="token3">)</span><span class="token3">;</span> $obj<span class="token1">-</span><span class="token1">></span><span class="token4">insert</span><span class="token3">(</span> <span class="token6">8</span> <span class="token3">)</span><span class="token3">;</span> $obj<span class="token1">-</span><span class="token1">></span><span class="token4">insert</span><span class="token3">(</span> <span class="token6">1</span> <span class="token3">)</span><span class="token3">;</span> $obj<span class="token1">-</span><span class="token1">></span><span class="token4">insert</span><span class="token3">(</span> <span class="token6">0</span> <span class="token3">)</span><span class="token3">;</span> <span class="token4">foreach</span><span class="token3">(</span> $obj as $number <span class="token3">)</span> <span class="token3">{</span> echo $number<span class="token3">.</span><span class="token2">"\n"</span><span class="token3">;</span> <span class="token3">}</span> 结果:<span class="token6">0</span> <span class="token6">1</span> <span class="token6">4</span> <span class="token6">8</span> ``` ``` 等同于: ``` <pre class="calibre10">``` class <span class="token4">MySimpleHeap</span> extends <span class="token4">SplHeap</span> <span class="token3">{</span> public <span class="token5">function</span> <span class="token4">compare</span><span class="token3">(</span> $value1<span class="token3">,</span> $value2 <span class="token3">)</span> <span class="token3">{</span> <span class="token5">return</span> <span class="token3">(</span> $value2 <span class="token1">-</span> $value1 <span class="token3">)</span><span class="token3">;</span> <span class="token3">}</span> <span class="token3">}</span> $obj <span class="token1">=</span> <span class="token5">new</span> <span class="token4">MySimpleHeap</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> $obj<span class="token1">-</span><span class="token1">></span><span class="token4">insert</span><span class="token3">(</span> <span class="token6">4</span> <span class="token3">)</span><span class="token3">;</span> $obj<span class="token1">-</span><span class="token1">></span><span class="token4">insert</span><span class="token3">(</span> <span class="token6">8</span> <span class="token3">)</span><span class="token3">;</span> $obj<span class="token1">-</span><span class="token1">></span><span class="token4">insert</span><span class="token3">(</span> <span class="token6">1</span> <span class="token3">)</span><span class="token3">;</span> $obj<span class="token1">-</span><span class="token1">></span><span class="token4">insert</span><span class="token3">(</span> <span class="token6">0</span> <span class="token3">)</span><span class="token3">;</span> <span class="token4">foreach</span><span class="token3">(</span> $obj as $number <span class="token3">)</span> <span class="token3">{</span> echo $number<span class="token3">.</span><span class="token2">"\n"</span><span class="token3">;</span> <span class="token3">}</span> 结果:<span class="token6">0</span> <span class="token6">1</span> <span class="token6">4</span> <span class="token6">8</span> ``` ``` ## **例子:** ``` <pre class="calibre17">``` <span class="token1"><</span><span class="token1">?</span>php $h <span class="token1">=</span> <span class="token5">new</span> <span class="token4">SplMinHeap</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> <span class="token">// [parent, child]</span> $h<span class="token1">-</span><span class="token1">></span><span class="token4">insert</span><span class="token3">(</span><span class="token3">[</span><span class="token6">9</span><span class="token3">,</span> <span class="token6">11</span><span class="token3">]</span><span class="token3">)</span><span class="token3">;</span> $h<span class="token1">-</span><span class="token1">></span><span class="token4">insert</span><span class="token3">(</span><span class="token3">[</span><span class="token6">0</span><span class="token3">,</span> <span class="token6">1</span><span class="token3">]</span><span class="token3">)</span><span class="token3">;</span> $h<span class="token1">-</span><span class="token1">></span><span class="token4">insert</span><span class="token3">(</span><span class="token3">[</span><span class="token6">1</span><span class="token3">,</span> <span class="token6">2</span><span class="token3">]</span><span class="token3">)</span><span class="token3">;</span> $h<span class="token1">-</span><span class="token1">></span><span class="token4">insert</span><span class="token3">(</span><span class="token3">[</span><span class="token6">1</span><span class="token3">,</span> <span class="token6">3</span><span class="token3">]</span><span class="token3">)</span><span class="token3">;</span> $h<span class="token1">-</span><span class="token1">></span><span class="token4">insert</span><span class="token3">(</span><span class="token3">[</span><span class="token6">1</span><span class="token3">,</span> <span class="token6">4</span><span class="token3">]</span><span class="token3">)</span><span class="token3">;</span> $h<span class="token1">-</span><span class="token1">></span><span class="token4">insert</span><span class="token3">(</span><span class="token3">[</span><span class="token6">1</span><span class="token3">,</span> <span class="token6">5</span><span class="token3">]</span><span class="token3">)</span><span class="token3">;</span> $h<span class="token1">-</span><span class="token1">></span><span class="token4">insert</span><span class="token3">(</span><span class="token3">[</span><span class="token6">3</span><span class="token3">,</span> <span class="token6">6</span><span class="token3">]</span><span class="token3">)</span><span class="token3">;</span> $h<span class="token1">-</span><span class="token1">></span><span class="token4">insert</span><span class="token3">(</span><span class="token3">[</span><span class="token6">2</span><span class="token3">,</span> <span class="token6">7</span><span class="token3">]</span><span class="token3">)</span><span class="token3">;</span> $h<span class="token1">-</span><span class="token1">></span><span class="token4">insert</span><span class="token3">(</span><span class="token3">[</span><span class="token6">3</span><span class="token3">,</span> <span class="token6">8</span><span class="token3">]</span><span class="token3">)</span><span class="token3">;</span> $h<span class="token1">-</span><span class="token1">></span><span class="token4">insert</span><span class="token3">(</span><span class="token3">[</span><span class="token6">5</span><span class="token3">,</span> <span class="token6">9</span><span class="token3">]</span><span class="token3">)</span><span class="token3">;</span> $h<span class="token1">-</span><span class="token1">></span><span class="token4">insert</span><span class="token3">(</span><span class="token3">[</span><span class="token6">9</span><span class="token3">,</span> <span class="token6">10</span><span class="token3">]</span><span class="token3">)</span><span class="token3">;</span> <span class="token5">for</span> <span class="token3">(</span>$h<span class="token1">-</span><span class="token1">></span><span class="token4">top</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> $h<span class="token1">-</span><span class="token1">></span><span class="token4">valid</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> $h<span class="token1">-</span><span class="token1">></span><span class="token4">next</span><span class="token3">(</span><span class="token3">)</span><span class="token3">)</span> <span class="token3">{</span> <span class="token4">list</span><span class="token3">(</span>$parentId<span class="token3">,</span> $myId<span class="token3">)</span> <span class="token1">=</span> $h<span class="token1">-</span><span class="token1">></span><span class="token4">current</span><span class="token3">(</span><span class="token3">)</span><span class="token3">;</span> echo <span class="token2">"$myId ($parentId)\n"</span><span class="token3">;</span> <span class="token3">}</span> <span class="token1">?</span><span class="token1">></span> 结果: <span class="token6">1</span> <span class="token3">(</span><span class="token6">0</span><span class="token3">)</span> <span class="token6">2</span> <span class="token3">(</span><span class="token6">1</span><span class="token3">)</span> <span class="token6">3</span> <span class="token3">(</span><span class="token6">1</span><span class="token3">)</span> <span class="token6">4</span> <span class="token3">(</span><span class="token6">1</span><span class="token3">)</span> <span class="token6">5</span> <span class="token3">(</span><span class="token6">1</span><span class="token3">)</span> <span class="token6">7</span> <span class="token3">(</span><span class="token6">2</span><span class="token3">)</span> <span class="token6">6</span> <span class="token3">(</span><span class="token6">3</span><span class="token3">)</span> <span class="token6">8</span> <span class="token3">(</span><span class="token6">3</span><span class="token3">)</span> <span class="token6">9</span> <span class="token3">(</span><span class="token6">5</span><span class="token3">)</span> <span class="token6">10</span> <span class="token3">(</span><span class="token6">9</span><span class="token3">)</span> <span class="token6">11</span> <span class="token3">(</span><span class="token6">9</span><span class="token3">)</span> ``` ```