0

簡単な説明: いくつかの値を更新した後、ヒープを元に戻す簡単な方法はありますか? キーを事前に知っていれば、置き忘れたキーを簡単に修正する方法があることはわかっています。ヒープが最初に作成されたのと同じ関数を使用して、すべてのヒープを順序どおりに復元する簡単な方法もあります。

この2つの間の何かを探しています。

たとえば、置き忘れた 2 つのキーの順序を復元する方法はありますか? (それらがどのキーであるかを知っていると仮定します)

そして長い説明: PHP でプライオリティ キュー (ヒープ) が必要です。そのための適切な SPL 関数のセットがあるようですが、update() のサポートは見つかりませんでした。update($key) とは、$key => $value を変更した後にヒープの順序を復元できる関数を意味します。そのため、 update() 関数を使用して独自のヒープを作成しましたが、問題なく動作します。別の場所から更新するキーを既に持っているので、ヒープを検索して見つける必要はなく、update($key) を呼び出すだけです。しかし、私はいくつかの最適化を探しています。

そのスクリプトでそれを使用する方法は次のとおりです。ヒープを作成し、それをいっぱいにしてから、これを繰り返します。

  1. ルートキーを見て、その値を取得します
  2. 値を関数のパラメーターとして使用し、それを F() と呼びましょう
  3. この関数 F() はその後、いくつかのことを行い、その間にヒープ内のいくつかの値を更新する可能性があります。
  4. ステップ1にジャンプ

ほとんどの場合、関数 F() は、ルートともう 1 つのキーの 2 つのキーを更新します。ただし、時折、更新が多かれ少なかれ可能性があります (すべてのキーを更新することさえありますが、まれです)。

関数 F() が変更のたびに update() 関数を呼び出さなければならないという事実はあまり好きではありません。何らかの理由で (F() 関数の 1 回の実行で 1 つのキーが繰り返し更新される可能性があります)、関数がキーの値を「手動で」変更し、終了後に配列を返す方がよいでしょう。更新されたキーの。次に、更新されたすべてのキーが一度に正しい位置に配置されます。

そのため、update() 関数は、1 つのキーではなく、キーの配列で動作するように変更する必要があります。しかし、それが可能かどうかも、その方法もわかりません。

4

0 に答える 0