2013-07-08 10 views
10

データ構造を提供するライブラリがあり、アイテムの順序を保持し、重複は含まれていませんか?そのようなデータ構造には適切な名前がありますか?重複のないリストまたは順序付きセット

私はそれがnubのリストのように振舞うと予想します。もちろん、私はそれが非効率的に実装されることは期待していません。

があなたの措置としてSetモノイドでfingertreeを使用します。

+2

Javaの[LinkedHashSet](http://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashSet.html)を思い出させます。だから私は、同じようなアプローチが不変の機能的なデータ構造のために使われると思う。 –

+2

あなたの型が 'Ord'に属していれば' Data.Set'を書いて 'O(n * log m)'を取る 'ordNub'を使うことができます。' n'は項目の数です。 'm 'ユニークなアイテムの数。 'Ord'ではなく' Hashable'であれば 'Data.HashSet'でも同じことができます。それは十分に非効率的であろうか? –

+0

こんにちは2013、あなたは解決策に到着しましたか? – akst

答えて

8

は、ここで一つの解決策です。次に、インサートで、完全な指先のmeasureを使用してメンバーシップを最初にチェックします。これにより、あなたはO(log(n))とsnoc、O(1)の削除を行います。

通常Setとのペア通常のリストと基本的に同じ効果を得る:

はここで別のソリューションです。より良い一定の要因が得られますが、O(log(n))が削除されます。

ここに質問があります:複製物を挿入したらどうしますか?既存のポジションを維持すべきか?新しいポジション?優先度キューは、必要に応じて、近くにある可能性があります。