jjzjj

php - 有没有办法让 PHP 的 SplHeap 重新计算? (又名 : add up-heap to SplHeap? )

我正在使用SplHeap保存具有从叶子遍历到根的有向边的树的图节点。为此,我预先计算了节点的“扇入”并将它们放入堆中,以便我始终可以从中检索具有最小扇入(0)的节点。访问一个节点后,我将其后继者的扇入减少1。显然,堆需要重新计算,因为后继者现在在错误的位置。我已经尝试过recoverFromCorruption(),但它没有做任何事情并且保持堆的顺序错误(具有较大fanIn的节点位于较小的fanIn之前)。作为解决方法,我现在在每次访问后创建一个新堆,每次总计为一个完整的O(N*log(N))排序。然而,应该可以对更改的堆条目进行堆上操作,直到它在O(log(N))中的正确位置。Spl

php - PHP SplHeap 真的是堆吗?

Heap的PHP实现真的是完整的实现吗?当我读到这篇文章时,http://en.wikipedia.org/wiki/Heap_%28data_structure%29,我认为子节点有特定的父节点,而父节点有特定的子节点。然而,当我查看PHP文档中的示例时,http://au.php.net/manual/en/class.splheap.php,看起来子节点都共享相同的'级别',但具体的父/子信息并不重要。例如,PHP示例中排名第10的三个节点各自的父节点是哪个节点?在我的应用程序中,当用户选择“节点156”时,我需要知道它的child是谁,以便我可以对他们进行访问。(我可以让他们的