SORU
7 AĞUSTOS 2011, Pazar


Haskell Öncelik Sırası uygulamalarının karşılaştırılması

Birkaç öncelik sırası uygulamaları Haskell için off-the-raf kullanılabilir gibi görünüyor. Örneğin, var:

kuyruk veri yapıları saf öncelikli olarak görünür. Eski parmak ağaçları, aşina olduğum bir veri yapısı üzerine kuruludur; ikincisi Veri etrafında sarıcı.Göster. Orada da

hangi basit bir öncelik sırası yapabilir tamamen işlevsel bir yığın veri yapılarını tanımlar. . Orada olduğunu da

her ikisi de tamamen işlevsel meldable kümeler inandığım Brodal/Okasaki veri yapısı kullanılarak yürütülmesi olmayan saf fonksiyonel topraklarda binom yığın veri yapısı benzerdir.

(Oh, ve de var

  • Veri.PriorityQueue öncelik sırası-0.2.2 hackage üzerinde ()

benim için belirsiz olan, ama bina ile ilgili öncelikli kuyruk Veri üzerine inşa edilmiş gibi görünüyor bir monad ve bağlı gibi görünüyor.Göster nasıl olsa. Bu soru, tamamen işlevsel öncelik sırası ile ilgileniyorum, öncelik sırası-0.2.2 paketi alakasız olduğunu düşünüyorum. Ama eğer yanılıyorsam beni düzeltin!)

Kuyruk veri yapısı inşa ediyorum saf fonksiyonel bir öncelik ihtiyacım var. Eğer herkes ben karar veririm gibi bilgelik herhangi bir kelime embarrassment of riches hackage tarafından sağlanan arasında bulunur diye merak ediyordum. Özellikle:

  1. Apart geleneksel öncelik sırası ekleme özellikleri ve Özü-min operasyonlar, tamamen işlevsel/değişmez bir sunum yapmak istiyorum varsayalım. Paketler, yukarıda belirtilen artıları ve eksileri nelerdir? Herkes onlardan birini kullanan var mı 'öfke'? Performans artıları ve eksileri nelerdir? Güvenilirlik? Daha yaygın olarak başkaları tarafından kullanılan? (Kullananlar kütüphane aşina olmak için daha muhtemel olacaktır beri kodum Diğerleri okumak için daha kolay olabilir.) Aralarında bir karar vermeden önce Bilmem Gereken başka şeyler var mı?
  2. Eğer ben de eğer verimli öncelik sırası birleştirilmesi istiyorsan, o zaman ne olacak? (Bu proje için bilmiyorum ama bu ama bu KADAR soru gelecek okuyucular için daha faydalı olur eklemeyi düşündüm.)
  3. Dışarıda kaçırdığım başka bir öncelik sırası paketleri var mı?

CEVAP
8 AĞUSTOS 2011, PAZARTESİ


Öncelik sırası uygulamaları bir bolluk hackage, sadece listenizi tamamlamak için bulunabilir

O PSQueue özellikle hoş bir arayüzü var. İlk uygulamalarından biri olduğunu ve güzel Ralf Hinze tarafından this paper kaplı sanırım. En verimli ve eksiksiz şekilde uygulanmasını olmayabilir ama şu ana kadar bütün ihtiyaçlarımı yapmıştır.

Bu MonadReader (issue 16) Louis Wassermann tarafından da pqueue paket yazmıştı (kim) çok iyi bir makale var. Yazısında Louis farklı öncelik sırası uygulamaları sunar ve ayrıca her biri için algoritmik karmaşıklığı içerir.
Bazı öncelik sırası iç sadeliği çarpıcı bir örnek olarak serin küçük bazı uygulamaları içerir. En sevdiğim (yazısında alınan):

data SkewHeap a = Empty | SkewNode a (SkewHeap a) (SkewHeap a) deriving (Show)

(   ) :: Ord a => SkewHeap a -> SkewHeap a -> SkewHeap a
heap1@(SkewNode x1 l1 r1)     heap2@(SkewNode x2 l2 r2) 
  | x1 <= x2    = SkewNode x1 (heap2     r1) l1 
  | otherwise = SkewNode x2 (heap1     r2) l2
Empty     heap = heap
heap     Empty = heap

extractMin Empty = Nothing
extractMin (SkewNode x l r ) = Just (x , l     r )

Küçük, güzel bir uygulama...kısa bir kullanım örneği:

test = foldl (\acc x->acc     x) Empty nodes
  where nodes = map (\x-> SkewNode x Empty Empty) [3,5,1,9,7,2]

Öncelik sırası uygulamalarında bazı kriterler here ve *21 haskell.org * çok ilginç thread bulunabilir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BDGcustoms

    BDGcustoms

    24 NİSAN 2011
  • sghaff1

    sghaff1

    23 Mart 2009
  • Ty Moss

    Ty Moss

    20 Kasım 2007