2013-07-08 26 views
10

Öğelerin sırasını koruyan ve herhangi bir kopya içermeyen bir veri yapısı sağlayan bir kütüphane var mı? Ve böyle bir veri yapısı için uygun bir isim var mı?Kopyaları olmayan veya sıralı bir set içeren liste

Her işlemden sonra nub uygulanmış bir liste gibi davranmasını beklerim. Elbette etkisiz olarak uygulanmasını beklemiyorum.

sizin tedbir olarak Set Monoid ile fingertree kullanın:

+2

Bana Java'nın [LinkedHashSet] 'ini hatırlatıyor (http://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashSet.html). Dolayısıyla, benzer bir yaklaşımın değişmez bir işlevsel veri yapısı için kullanılabileceğini düşünüyorum. –

+2

Türünüz 'Ord'ye aitse, yazmak için' Data.Set 'yazabilir ve 'O (n * log m)' yi alan 'ordNub' kullanabilirsiniz, burada' n' öğe sayısıdır ve 'm 'Eşsiz ürün sayısı. "Hasiple" ve "Ord" değilse, aynı şeyi "Data.HashSet" ile de yapabilirsiniz. Yeterince verimsiz olur mu? –

+0

Merhaba 2013, bir çözüme vardın mı? – akst

cevap

8

İşte bir çözüm. Daha sonra ekler üzerinde, ilk parmağınızı measure kullanarak tüm üyeliğinizi kontrol edin. Bu size O(log(n)) eksilerini ve snoc, O(1) silmelerini verir.

normal Set eşle normal liste ve temelde aynı etkiyi elde:

Burada başka çözüm. Daha iyi sabit faktörler elde edersiniz, ancak O(log(n)) siler.

İşte bir soru: Çoğaltmanın eklenmesiyle ne yapmak istersiniz? Mevcut pozisyon korunmalı mı? Yeni pozisyon? Öncelik Kuyrukları, bağlı olduğunuza yakın olabilir.

İlgili konular