私はすでにパーシスタンスセグメントツリーを作っていますが、現在はあるインデックスからあるインデックスへの範囲の更新があります。永続性セグメントツリーを複雑さを少なくして更新するには? 私はちょうどセグメントツリーで範囲更新を適用する方法は?
1
A
答えて
0
永続セグメントツリーを再構築しかし、今、元の配列要素は、配列の要素を今すぐ同じクエリが再び3 6 2 4 5頼まれている今、1から3に更新されていることを言うことができますしています。ですから、パーシスタンスセグメントツリー全体を再構築する必要があります。
範囲の更新では、範囲内の各要素を非数式で変更することを意味する場合、最適なオプションは、指定された範囲内の各要素に単一要素の更新を適用することです。これはO(range_sz * log n)
になります。n
はツリー内の要素の数です。
O(log n)
で単一要素の更新を実行する方法を知っていることを前提としています。
"範囲内のすべての要素を指定した値v
"にするなど、更新が制限されている場合、関連する範囲が更新に含まれているセグメントツリーのすべてのノードに対して遅延更新を使用できます一部のカスタムフィールドを値v
に設定します。次に、照会するときに、ノードの範囲(照会範囲にその範囲が含まれている場合)を受け入れるたびにこのフィールドをチェックし、値がある場合はその値をmin/max
または照会しているものにします。
これにより、更新とクエリの両方がO(log n)
に保持されます。
関連する問題
- 1. 範囲/セグメントツリーRuby
- 2. 日付範囲の適用方法は?
- 3. 範囲に境界線をプログラムで適用する方法
- 4. svnリビジョン範囲の変更を無関係のレポに適用する方法
- 5. Bokeh、Python:余分な軸の範囲を更新する方法
- 6. 異なるブックの範囲でvlookupを適用する方法は?
- 7. オンロードに相当する適用範囲を変更する
- 8. clingo可変範囲を適用する
- 9. EaselJSを使用して範囲スライダでキャンバスシェイプを更新する
- 10. ピボットデータ範囲の文字列または範囲の更新
- 11. 更新指令範囲コントローラサービスコール
- 12. WinAPIの適用範囲
- 13. dynamodbの範囲キーの範囲を照会する方法は?
- 14. Crystalレポートで日付の範囲を含むSQLクエリを適用する方法
- 15. 太字と斜体をNSMutableAttributedStringの範囲に適用する方法は?
- 16. VIPS/Pythonで特定の階調範囲に変換を適用する方法
- 17. 適用範囲は、「この」javaの
- 18. 範囲変更時のビューの更新
- 19. 範囲(宿題)に一致する方法を最適化する方法
- 20. 範囲スライダのトラックの色を変更する方法は?
- 21. ワークシート内のセル範囲でUDFを使用する方法は?
- 22. Qliksensで範囲の値を変更する方法
- 23. jQueryテーブル内の行の範囲の数を更新する方法
- 24. 特定の幅の範囲にのみメディアクエリを適用する方法
- 25. 範囲内のセル値を更新するExcelの範囲内の別のセルを変更することに基づいて範囲を変更する
- 26. パイソン(numpyの) - DFエラーを適用する - はIndexError:タプルインデックス範囲外
- 27. 配備後にデータベースの更新を適用する方法は?
- 28. 列の範囲をセルの値で更新する
- 29. Gspread複数範囲の更新
- 30. jQueryのUI範囲スライダーの更新が
ツリー全体を再構築しないでください。 * index *の話は、あなたが持っているものが木ではなくリストであることを暗示していますか?いくつかの(疑似)コードも便利です。 – diginoise
私は3 2 4 1 5の配列を持っていると言うことができます。今度は、この配列のインデックス2からインデックス4までの最大数を見つけなければなりません。インデックスはこの配列のインデックスを意味します。最初に永続性ツリーを作成してからクエリに答えます。しかし、元の配列要素が1から3に更新されたと言うことができます。配列要素は3 6 2 4 5です。今度は同じクエリが再度要求されます。ですから、パーシスタンスセグメントツリー全体を再構築する必要があります。 – Souravirus