내가 "국가는"간단한 래퍼 다음 하스켈 나무 종류, 말해봐있다 - 소요 나는 또한 기능이기능적으로 폭 우선 트리를 생성하는 방법. (하스켈로)
data Tree a = Branch (State a) [Tree a]
| Leaf (State a)
deriving (Eq, Show)
의 "> 트리 확장 :: 트리에" 리프 노드 을 분기로 확장하거나 분기를 가져 와서 변경되지 않은 상태로 반환합니다. 이 트리 유형은 N 개 (N-ary) 검색 트리를 나타냅니다.
깊이 검색은 낭비입니다. 검색 공간이 분명 무한하기 때문에 모든 트리의 리프 노드에서 확장을 사용하여 검색 공간을 쉽게 확장 할 수 있고 실수로 누락 될 가능성이 있습니다 목표 상태는 거대합니다 ... 따라서 유일한 솔루션은 광범위한 우선 here에 구현되어 있으므로 해결 방법을 찾을 수 있습니다. 내가 생성 원하는 무엇
는하지만, 나무가 해결책을 찾는까지 를 이송됩니다. 목표 상태가 발견 될 때까지 단순히 첫 번째 자식 노드에서 "확장"기능이라고도 불리는이 깊이 우선 수행하는 방법 만 알고 있기 때문에 이것은 문제가됩니다. (이것은 실제로 다른 불편한 목록을 생성하지 않을 것입니다.)
아무도 나에게이 방법 (또는 전체 알고리즘)을 수행하는 방법에 대한 힌트를주지 않거나 괜찮은 복잡성으로 가능한지에 대한 평결을 줄 수 있습니까? ? (또는 이것에 대한 출처는 다소 적다.)
제쳐두고 'State'이외의 다른 것을 사용하고 싶습니다. 그 이유는 그 이름이 사람들을 혼란에 빠뜨리기 쉬운 State Monad의 표준 라이브러리에서 사용되기 때문입니다. –
여기에 제시된 조언을 기반으로 알고리즘을 구현하기 위해 State Monad를 사용하고 있다는 것을 깨달았습니다. – wen