範囲合計問題のセグメントツリー実装の時間の複雑さの証明


10

のサブ配列の合計を見つけるためにセグメントツリーを使用できることを理解しています。そして、ここのチュートリアルによれば、これはOlog n 時間で実行できますAO(logn)

ただし、クエリ時間が実際にことを証明することはできません。このリンク(および他の多くのリンク)は、各レベルで処理されるノードの最大数が4であることを証明できるため、O4 log n = Olog n )であると述べていますO(logn)4O(4logn)=O(logn)

しかし、おそらく矛盾によって、どうやってこれを証明するのでしょうか?

もしそうなら、もし私たちがより高次元の配列の範囲の合計にセグメントツリーを使うとしたら、証明はどのように拡張されるでしょうか?

たとえば、元の行列を4つの象限(線形配列の2分の1間隔と同様)に分割して、象限セグメントツリーを構築してサブ行列の合計を見つけることを考えることができますが、その証拠は私にはわかりません。


セグメントツリーの構築はO(n)、クエリはO(log n)、更新はO(log N)です。合計配列に対するその利点は、更新の複雑さにあります。
Nurlan

回答:


11

2

以下に示すセグメントツリーについて考えてみましょう。

セグメントツリー

32logn2logn=Θ(logn)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.