2011-10-21 14 views
2

私はコンテンツの効率的な検索を可能にするスタックのようなデータ構造を探しています。効果的には、要素が挿入される順序を維持する構造体が必要ですが、要素の値によってO(n)より速く検索することもできます(重複を防ぐため)。検索可能なスタック

要素が小さい(ポインタ)であり、私の最大の関心事は、メモリ効率なので、単純に二つの相補的なデータ構造(検索するためと1を維持するために、1)を使用することは絶対に理想的ではありません。

+0

典型的な検索不可能なスタックと同様に、O(1)の要素をプッシュしてポップすることができると思いますか? – NPE

+0

構造内にいくつのアイテムがあると思われますか?それが小さい場合は、線形検索が高速です。 – GManNickG

+0

@aix:はい、プッシングとポッピングは非常に頻繁に発生するので、これは非常に良いでしょう。 – zennehoy

答えて

4

2つのデータ構造のメモリ効率を過小評価しないでください。まず、単純なブーストマルチインデックスコンテナライブラリを試して、そのメモリフットプリントで十分かどうかを確認する必要があります。

私が答えとして考えていた最初のあまりデータ構造は、スキップリストでした。ただし、注文しているキーとは異なるキーを検索しているため、このリストは使用できません。同じアイデアを持っている人たちのために注意してください。

+0

おかげ:: multi_index、私はそれはまた、シーケンスインデックスをサポートして実現していませんでした。私はあまりにも多くの記憶を取るまで(そしてそうでなければ)それを使うでしょう。 – zennehoy

1

あなたの主な関心事は、本当に、あなたがより良いプリミティブリンクリストデータ構造を使用するためにメモリ効率である場合。線形探索の複雑さは、あなたが逆数を証明していない限りそれほど悪くありません。

または、2つの小さなアップグレードで効率的な検索を行うデータ構造を使用することもできます。各要素には以前に追加された要素へのリンクが含まれているため、逆のリストを作成する必要があります。すなわち、最後に追加された要素。これらのアップグレードは、エレメントのプッシュとポップを容易にするために必要です。

+0

私も注文したコンテナ内に配列決定されたリンクリストを設定する考えはなく、ブースト:: multi_indexは私にいくつかの作業を節約するため、私はthitonの答えを受け入れるとあなたをupvoteますように。 – zennehoy

関連する問題