2016-08-10 2 views
1

この記事に基づいて、 Time complexity of TreeMap operations- subMap, headMap, tailMap時間ツリーマップの複雑<>操作(GET)とのsubMap()

のsubMap()自体はO(1)、及びO(n)はサブマップを反復から来ます。だから、


、なぜその後、(キー)を取得するでしょうか?

我々はOであり、代わり

をのsubMap(キー、真の、キー、true)を使用することができる(1)と、このサブマップを繰り返すもO(1)です。

get(key)よりも速く、O(log(n))です。ここに何か間違っています...

答えて

1

我々はO

このサブマップを反復でもある(1)

これが正しいOであるサブマップ(キー、真の、キー、真)に代えて、使用することができ(1)。

O(n)は質問に由来します。答えは、これを暗示するものは何も言いません。それは本当ではないので、良いです。

サブツリーを反復する時間の複雑さはO(log n + k)であり、nはマップ全体の要素の数であり、kはサブマップの要素の数です。つまり、反復を開始するときに最初の位置に到達するまでにはO(log n)が必要です。それがどのように行われるか見るには、getFirstEntry()の実装を参照してください。

これは、O(log n)に対するアプローチの全体的な複雑さをもたらしますが、中間オブジェクトがプロセスで作成されて破棄されるため、単純なgetよりも遅くなる可能性があります。

+0

ありがとうございます。完全に私には意味をなさない。私の質問に時間を割いてくれてありがとう。 – Leonard

1

答えはちょっと混乱します。技術的には、サブマップの作成は一定の操作です。しかし、これは実際には低いキーと高いキーを設定することから離れて実際には何もしないし、ツリー構造を元のツリーと共有しているからです。

結果として、ツリー上の操作は、特定のメソッドが呼び出されるまで実際には延期されます。だからget()はまだ元の地図全体を通り抜け、それが下限と上限を越えていないかどうかだけチェックします。 get()というだけでも、です。nは、サブマップからではなく元のマップから来ています。

0

SubMapの構築にはO(1)時間がかかりますが、すべての取得操作は元のマップと同じO(log n)時間になります。なぜならSubMapはこのオブジェクトをラップして最終的に範囲チェックを完了し、 get()メソッドを元のソースマップオブジェクトに追加します。