ソートされた配列またはソートされたリンクリストはO(1)
、キーの減少または増加をサポートします(重複がない/最小限であると仮定します。第4段落を参照してください)。これは、考えてみると、キーの減少または増加操作のために最大 2 つの要素を交換する必要があるためです。
実際には最良のデータ構造ではありませんが (その場所はありますが)、それでも答えはあります。
唯一の制約は、最初にノードへのポインターが必要なことです。これは、ノードを見つけるだけでO(log n)
、それぞれが必要になるためです。O(n)
重複がある場合、移動は両方に対して最悪のケースになる可能性がO(n)
あり (ほとんどの値が同じ場合)、これはかなり悪いことです。ただし、リンクリストの場合、リンクリストのリンクリストのようなものを持つことで取得できるはずですO(1)
。大きなリンクリストの各ノードは特定の値を表し、そこからの各リンクリストはすべてのノードを表しますその値に等しくなります。
BBSTまたはスキップリストが機能しない理由に関する私の最初の答え:
(無駄になるのはもったいないので削除しませんでした)
私が知る限り、少なくとも re-insert と同じくらい効率的ですが、BBSTまたはスキップリストでは、単一の要素で移動するよりも少ない最悪のケースO(log n)
は不可能です。平均的なケースは 未満である可能性があります。O(log n)
私たちはそれを探しています -移動したい要素の位置を見つけるためのルックアップはO(log n)
、明らかにそれを行う必要があります.
なんらかの奇妙な理由ですでにポジションを持っている場合:
O(log n)
最悪の場合の移動がBSTよりも小さくならない理由:ルートを移動しようとしていて、次の要素がツリーの高さにある場合を考慮してください (たとえば、右の子には、左の子を持つ左の子を持つ左の子があります。左の子...木の高さまで)。あなたはO(log n)
それを見つける必要があります。
O(log n)
最悪の場合の移動がスキップ リストよりも小さくならない理由O(log n)
: リストに存在するアイテムの後に、それらのリストに存在するアイテムが続く場合を考えてみましょう(これが可能である場合、図O(log n)
からそう思われます。私の理解では、スキップリストはやや基本的なものです)。リスト内の該当するアイテムを交換する必要があることは明らかです。O(log n)
すでにその地位にある場合、それが可能な効率的な順序付けられた構造が存在する可能性がありますが、おそらくツリーベースの構造については存在しません (上記の議論のため)。構造。