동적 트리는 네트워크 흐름, 동적 그래프, 조합 문제 (Tarjan 및 Werneck의 "실제 동적 트리") 및 최근에 사전 병합 (Adam Karczmarz의 "단순 병합 가능한 사전")과 같은 문제를 해결하는 데 중요한 역할을합니다.
동적 트리 란 1983 년 Sleator & Tarjan의 논문 "동적 트리에 대한 데이터 구조"에 정의 된 정의를 참조합니다. 그 이후로 기능 프로그래밍 연구 영역 내에는 거의 노력이 발표되지 않았습니다.
- Edward Kmett는 주로 C ++ 대응의 번역으로 ST 트리 버전을 구현했습니다 ( 링크 컷 트리 참조) .
- Chris Okasaki는 유명한 책 "순전히 기능적인 데이터 구조"에서 Splay 트리를 제한적으로 구현했습니다.
- Ralf Hinze와 Ross Paterson은 2-3 개의 핑거 트리라는 기능적 데이터 구조를 도입했지만 동적 트리의 원래 정의와는 약간 다른 목표를 가지고 있습니다.
동적 트리의 구현 (및 아마도 성능)은 세 가지 접근 방식에 따라 나뉩니다.
- ET 나무 (오일러 투어)가 큰 역할을하는 선형화. 순전히 기능적인 연구를 찾지 못했습니다.
- ST 나무가 주력 인 경로 분해는 Kmett 버전을 찾았습니다.
- 최상위 트리, 토폴로지 트리 및 RC 트리가 플레이어 인 트리 축소. 순전히 기능적인 연구를 찾지 못했습니다.
순전히 기능 분석 및 구현은 Splay, AVL, 레드-블랙 트리에서 찾을 수 있지만 동적 트리는 아닙니다. 전자는 후자의 그림자 (가상 또는 보조라고도 함) 데이터 구조로 간주됩니다.
그래서 내 질문은 :
Functional Programming 연구 커뮤니티가 동적 트리 데이터 구조에 참여하지 않는 이유 (단점, 약점)는 무엇입니까?
14
나는 공식 의견을 형성하기위한 권위있는 기능적 프로그래밍 커뮤니티위원회를 구성하지 않고 어떻게 이것이 가능한지 이해할 수 없다. 여기서 대답 할 수있는 것이 있도록 질문을 재구성 할 수 없습니까? 내가 알 수있는 한 OP는 Haskell 또는 그 밖의 다른 곳에서 동적 트리를 구현 한 다음 여기로 돌아와서 결국 완료되었다고보고해야합니다.
—
Andrej Bauer
@AndrejBauer로 업데이트 : OP가 사라져 Haskell에서 동적 트리를 구현했습니다 : arxiv.org/abs/1908.11105
—
jbapple