2013-05-06 16 views
10

en iyi ağaç benzeri DAG tanımlamak için?nasıl <strong>Haskell</strong> size (bir kökle) (dizeleri) bir <strong>yönlendirilmiş Mercury grafik</strong> (DAG) nasıl tanımlarım Haskell

Özellikle mümkün olduğunca hızlı bu veri yapısına aşağıdaki iki işlevi uygulamak gerekir:

  1. (ebeveynler vb ebeveynleri dahil) bir elementin bütün (doğrudan ve dolaylı) ataları bulun.
  2. Bir öğenin tüm (doğrudan) çocuklarını bulun. her bir çift, adının (String) ve bu elemanın (doğrudan) anne adlarını içeren şeritlerinin bir listesi ([String]) 'den oluşan grafiğinin bir elemandır burada

I [(String,[String])] arasında düşünce. Bu uygulamadaki sorun, ikinci görevi yapmak zor olmasıdır.

Ayrıca, [(String,[String])] dizesini de kullanabilirsiniz; bu sırada dizeler ([String]) (doğrudan) çocukların adlarını içerir. Ama yine burada, ilk görevi yapmak zor.

Ne yapabilirim? Hangi alternatifler var? Hangisi en etkili yol?

DÜZENLEME: Bir açıklama daha: Ben de kolayca tanımlanmasını isterim. Bu veri türünün örneğini kendim "elle" tanımlamalıyım, bu yüzden gereksiz tekrarlardan kaçınmak istiyorum.

+2

'veri Aile = Ego {ebeveynler, çocuklar :: [String]}; DAG = Harita Dize Ailesi yazın? Ebeveynleri olduğu kadar çocukları da saklarsanız, her ikisinin de operasyonları makul derecede hızlı olmalıdır. –

+1

Ya da iki haritanız var. Ebeveynlerden çocuklara, ikinci çocuktan ebeveynlere. Size en uygun olanı seçin. – Adrian

+0

Asıl soruda, suggetionunuzu zorlaştıran ek bir not ekledim. –

cevap

2

the tree implementtion in Martin Erwig's Functional Graph Library'a baktınız mı? Her düğüm, hem çocuklarını hem de ebeveynlerini içeren bir içerik olarak temsil edilir. Buna nasıl erişileceğini öğrenmek için graph tür sınıfına bakın. İstediğiniz kadar kolay olmayabilir, ancak zaten orada, iyi test edilmiş ve kullanımı kolay. Büyük bir projede on yıldan fazla bir süredir kullanıyorum.

+0

Haskell haritaları üzerindeki hızı hakkında bir fikrin var mı? Bu kütüphaneyi kullanmak istiyorum ama grafiklerim oldukça büyük. – Dilawar

İlgili konular