したがって、私はthis RMQ(Range Minimum Query)に関するTopCoderチュートリアルを読んで、大きな質問を受けました。彼は私が今まで理解できるか、 approachを導入セクションで範囲最小クエリ<O(n), O(1)>(ツリーから制限付きRMQへ)
はこれです:
(全体的なアプローチは、実際に、Sparse Table (ST) Algorithmで導入された方法論を使用していますReduction from LCA to RMQ、およびfrom RMQ to LCA)
配列Aを考えます[N]、それをデカルトツリーに変換し、RMQ問題をLCA(Lowest Common Ancestor)問題にする必要があります。後で、配列Aの簡略化されたバージョンを取得し、それを制限されたRMQ問題にすることができます。
これは基本的に2つの変換です。最初のRMQからLCAまでの部分はシンプルです。スタックを使用することによって、O(n)回の変換を行うことができ、配列T [N]となり、T [i]は要素iの親である。そして木は完成した。
ここで私は理解できないことがあります。 O(n)のアプローチでは、配列が|A[i] - A[i-1]| = 1
であり、その配列はチュートリアルのReduction from LCA to RMQセクションに導入されています。それはこの木のオイラーツアーを含む。しかし、私の最終的な結果からどのようにこれを達成できますか?私のアプローチは線形ではないので、このアプローチでは悪いと考えるべきですが、これには線形アプローチがありますか?
UPDATE:木の絵私
Here's the array A[]:
n : 0 1 2 3 4 5 6 7 8 9
A[n]: 2 4 3 1 6 7 8 9 1 7
Here's the array T[]:
n : 0 1 2 3 4 5 6 7 8 9
T[n]: 3 2 0 * 8 4 5 6 3 8 // * denotes -1, which is the root of the tree
//Above is from RMQ to LCA, it's from LCA to RMQ part that confuses me, more below.
を混同ポイント:
オイラーツアーがちょうどDFS(深さ優先のように、各ノードの子を知っている必要があります最初の検索)、T [n]は各要素のルートのみを持ち、子はありません。ここで
「私の最終結果をどのように達成できるか」ということを理解しているかどうかはわかりません。特にあなたが混乱していることを詳しく説明できますか? – templatetypedef
@templatetypedefさて、質問に追加します。 –
@templatetypedefが追加されました。 –