트리 데이터 구조와 비슷한 반격 자에 대한 데이터 구조가 있습니까?


13

트리를 부분 순서 집합으로 간주하면 조인-은밀의 특별한 경우가됩니다. 결합-밀집의 경우, 우리는 두 요소의 (고유 한) 최소 상한을 (더 많거나 적은) 효율적으로 계산할 수 있기를 원합니다. 트리의 경우,이를 가능하게하는 데이터 구조는 해당 노드의 각 요소에 대해 부모에 대한 포인터와 루트에 대한 거리 측정 값을 저장하는 것입니다. (실제로, "뿌리까지의 거리 측정"에 일반적으로 사용되는 토폴로지 정렬을 기반으로 한 라벨링은 효과적으로 필요한 것은 효율적으로 평가할 수있는 호환되는 부분 순서입니다).

각각의 유한 조인-밀실은 최소 상한이 세트의 합집합에 의해 주어 지도록 순서대로 포함 된 유한 세트의 서브 세트의 세트로 표현 될 수있다. 따라서, 한정된 수의 태그로 각각의 요소를 표현하고, 대응하는 태그의 결합에 의해 최소 상한을 계산하는 것은 하나의 가능한 데이터 구조 일 것이다. (보체를 보면, 해당 태그의 교차로 최소 상한을 정의하는 것도 가능하다는 것을 알 수 있습니다.) 훨씬 더 일반적인 데이터 구조는 단순히 행렬을 사용하여 "a <= b "또는 심지어"join (a, b) "의 모든 결과.

그러나 이러한 데이터 구조를 사용하여 트리를 나타내는 것은 다소 이상합니다. 두 요소의 (고유 한) 최소 상한을 효율적으로 계산할 수있는 조인-실제에 대해 더 많은 트리와 유사한 데이터 구조가 있습니까? (아마도 나무의 뿌리까지의 거리 측정과 비슷한 노드에 추가 정보가있는 일종의 유향 비주기 그래프입니까?)


2
math.hawaii.edu/~jb/math618/os2uh.pdf의 정리 2.2 는 반격자가 위에서 가정 한 것처럼 (상대적으로 사소한 방식으로) 하위 집합으로 표현 될 수 있음을 보여줍니다.
Thomas Klimpel

답변:


9

격자 이론에 관한 이 블로그 포스트 에는 Vijay K. Garg의 "응용 프로그램이있는 격자 이론"이 포함 된 유용한 참고 섹션이 있습니다. 2 장 "포셋 표시"에서는 포셋을 표현하기위한 일부 데이터 구조에 대해 설명하고 이러한 데이터 구조를 사용하여 join (x, y)를 계산하는 방법에 대해 설명합니다.

논의 된 처음 2 개의 데이터 구조는 전이 감소 그래프 (= 하스 다이어그램 / 커버 관계)와 전이 폐쇄 그래프 (= 포지션 관계)의 인접리스트 표현입니다. 노드에 레이블을 지정하기 위해 토폴로지 정렬을 사용하는 이점에 대한 설명이 해당 논의보다 우선합니다. 토폴로지 정렬의 레이블은 문제의 나무에 대한 데이터 구조의 일부인 "뿌리까지의 거리 측정"으로 충분할 것입니다.

다른 논의 된 표현은 "골격 표현", "매트릭스 표현"및 "차원 기반 표현"이다. "Skeletal Representation"은 흥미롭고 유용하지만, 포셋의 (= any) 체인 분해를 기반으로합니다. "행렬 표현"은 사소한 것처럼 보이지만 대부분의 실제 문제에 대한 최상의 표현 일 것입니다. "치수 기반 표현"은 선형 오더의 데카르트 곱의 부분 집합으로 포즈를 나타내지 만 이러한 종류의 최소 표현을 계산하는 것은 NP-hard입니다.

결론적으로, 이것들의 가장 나무와 같은 표현은 ( "근원까지의 거리 측정"대신에) 토폴로지 정렬에 의한 노드의 라벨링과 함께 전이 감소의 인접리스트 표현입니다. 이것은 실제로 Sage가 사용하는 표현 중 하나입니다 (다른 하나는 "매트릭스 표현").

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.