私は、単純なリストと同じ速さでソートすることができ、以下の方法で要素を削除することができるデータ構造を探しています。このようなデータ構造は存在しますか?
[{2,[1]},
{6,[2,1]},
{-4,[3,2,1]},
{-2,[4,3,2,1]},
{-4,[5,4,3,2,1]},
{4,[2]},
{-6,[3,2]},
{-4,[4,3,2]},
{-6,[5,4,3,2]},
{-10,[3]},
{18,[4,3]},
{-10,[5,4,3]},
{2,[4]},
{0,[5,4]},
{-2,[5]}]
すなわちタプルを(これはErlangの構文である)を含むリスト:我々はこのようなリストを持っているとしましょう。各タプルは、を計算するために使用されるリストのメンバーを含むのと、のリストを含みます。私がリストでやってみたいことは次のとおりです。まず、ソートそれは、その後、は、リストの先頭、およびリストついにクリーンを取ります。 クリーン私は、頭の中にある要素を含むテールからすべての要素を削除することを意味します。つまり、頭と交差するテールのすべての要素は空ではありません。たとえば、ソート後の頭部は{18,[4,3]}
です。次のステップは、4
又は3
を含むリストのすべての要素を削除して、すなわち、結果のリストはこの1つでなければならない:
[{6,[2,1]},
{4,[2]},
{2,[1]},
{-2,[5]}]
プロセスは、新しいヘッドを取り、リスト全体が消費されるまで、再び洗浄することにより続きます。クリーンプロセスがオーダーを保持している場合、各反復のリストを使用する必要はありません。
ここでのボトルネックは、クリーンプロセスです。私は今よりも早く掃除をするための構造が必要です。
誰でも注文を失うことなく効率的にこれを行うことができる構造を知っていますか、少なくとも高速ソートを許可していますか?
非線形ルックアップ効率を作成するには、何らかのサポートインデックス構造が必要です。どのノードがどの整数値を有するかを追跡する。 これで、原価計算でサポートインデックス構造を更新するためのオーバーヘッドを考慮する必要があります。 – mba12
正確には「効率的」とは何ですか? 「高速ソート」とは何ですか?標準リストでは不十分ですか?どのような操作が必要であり、平均的な複雑さは何ですか? – Bergi
外側のリスト、内側のリスト、または構造全体について話しているのかどうかは本当にはっきりしません。 – Bergi