에 가장 좋은 나무 같은 DAG을 정의?어떻게 <strong>하스켈</strong> 당신이 (하나 개의 루트로) (문자열)을 <strong>감독 비순환 그래프</strong> (DAG)를 정의하려면 어떻게 하스켈
나는 특히 가능한 한 빨리이 데이터 구조에 다음과 같은 두 가지 기능을 적용해야합니다
- 이 (부모 등의 부모 포함) 한 요소의 모든 (직접 및 간접) 조상을 찾아보십시오.
- 한 요소의 모든 (직접적인) 하위를 찾으십시오. 각각의 쌍은 그 이름 (
String
)이 요소 (직접) 부모의 이름을 포함하는 문자열리스트 ([String]
)으로 이루어진 그래프의 하나 개의 원소이고
난 [(String,[String])]
생각. 이 구현의 문제점은 두 번째 작업을 수행하는 것이 어렵다는 것입니다.
문자열 목록 ([String]
)에 (직접) 하위 항목의 이름이 포함되어있는 동안에도 [(String,[String])]
을 다시 사용할 수 있습니다. 그러나 여기에서도 다시 첫 번째 작업을 수행하기가 어렵습니다.
어떻게해야합니까? 어떤 대안이 있습니까? 가장 효율적인 방법은 무엇입니까?
편집 : 또 하나의 발언 : 나도 쉽게 정의하고 싶습니다. 이 데이터 형식의 인스턴스를 직접 "손으로"정의해야하므로 불필요한 반복을 피하고 싶습니다.
'data Family = Ego {parents, children :: [String]}; DAG = Map String Family'을 입력하십시오. 부모뿐만 아니라 어린이를 저장하는 경우 두 가지 작업 모두 합리적으로 빠릅니다. –
두 개의지도가 있습니다. 하나는 부모에서 자녀에게, 다른 하나는 어린이에서 부모에게 두 번째입니다. 가장 적합한 방법을 선택하십시오. – Adrian
나는 원래 질문에 덧붙여서 당신의 생각을 어렵게했다. –