0

简短描述:在更新几个值后,有没有一种快速的方法可以让堆恢复正常?如果我事先知道钥匙,我知道有一种简单的方法可以修复一个放错位置的钥匙。还有一种简单的方法可以将所有堆恢复为有序,使用与最初创建堆相同的函数。

我正在寻找这两者之间的东西。

有没有办法恢复两个放错位置的键的顺序?(假设我知道它们是哪些键)

详细说明:我需要 PHP 中的优先级队列(堆)。似乎有一组很好的 SPL 函数,但我没有找到对 update() 的支持。通过 update($key),我的意思是一个函数,它允许我在更改 $key => $value 后恢复堆顺序。所以我用 update() 函数编写了自己的堆,它工作得很好。我已经有了要从另一个地方更新的密钥,所以我不必通过堆搜索来找到它,只需调用 update($key)。但我正在寻找一些优化。

我在该脚本中使用它的方式是:我创建一个堆,将其填满,然后重复执行此操作:

  1. 查看根键,获取它的值
  2. 在某个函数中使用该值作为参数,我们称之为 F()
  3. 这个函数 F() 然后做一些事情,在此期间,它可能会更新堆中的几个值。
  4. 跳到步骤 1

大多数时候,函数 F() 会更新两个键:根键和另一个键。但有时,它可能会更新更少或更多(有时它甚至可以更新所有键,但很少见)

我不太喜欢这样一个事实,即函数 F() 必须在每次更改后调用 update() 函数。由于某些原因(一个键可能会在 F() 函数的一次运行中重复更新),如果函数“手动”更改键的值,然后在完成后返回一个数组,那就更好了的密钥,已更新。然后,所有这些更新的密钥将一次全部放在正确的位置。

因此,必须修改 update() 函数以使用键数组而不是一个键。但我不确定这是可能的,也不知道怎么做。

4

0 回答 0