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:
- (ebeveynler vb ebeveynleri dahil) bir elementin bütün (doğrudan ve dolaylı) ataları bulun.
- 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.
'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. –
Ya da iki haritanız var. Ebeveynlerden çocuklara, ikinci çocuktan ebeveynlere. Size en uygun olanı seçin. – Adrian
Asıl soruda, suggetionunuzu zorlaştıran ek bir not ekledim. –