Computer >> 컴퓨터 >  >> 프로그램 작성 >> 프로그램 작성

데이터 구조의 가상 트리에서 실행

<시간/>

가상 트리에서 일부 모서리는 솔리드로 처리되고 일부는 대시로 처리됩니다. 일반적인 펼침은 단단한 나무에서만 수행됩니다. 가상 트리의 노드 y에서 재생하기 위해 다음과 같은 방법이 구현됩니다.

알고리즘은 각 패스에서 한 번씩 트리를 세 번 보고 변경합니다. 첫 번째 패스에서는 노드 y에서 시작하여 솔리드 트리에서만 확장되어 y에서 전체 트리의 루트까지의 경로가 점선이 됩니다. 이 경로는 접합에 의해 생성됩니다. 노드 y에서의 마지막 분할은 이제 y 트리의 루트를 생성합니다. 덜 비공식적으로 알고리즘은 다음과 같이 설명됩니다.

Splay(y) 알고리즘

통과 1 가상 트리 위로 올라가지만 확고한 하위 트리 내에서만 확장이 수행됩니다. 이 패스가 끝나면 y에서 루트로의 경로가 파선으로 바뀝니다.

통과 2 노드 y에서 위로 걸어 올라가 y의 각 적절한 조상에서 접합합니다. 이 단계가 끝나면 y에서 루트까지의 경로가 솔리드가 됩니다. 단, 노드 y와 원래 트리의 모든 자식(패스 1 이전의 것)은 이제 왼쪽 자식이 됩니다.

패스 3 노드 y에서 루트까지 일반적인 방식으로 펼칩니다.

이를 통해 사전 지식을 활용하여 확률 추정을 개선할 수 있습니다. 주어진 잎 세트에 대해. 따라서 목표는 최소 외부 경로 가중치로 트리를 구성하는 것입니다.

아래에 예가 나와 있습니다.

문자 빈도 테이블

편지 z k d
빈도 2 7 24 32 37 42 42 120

허프만 코드

문자 빈도 코드 비트
e 120 0 1
d 42 101 3
42 110 3
37 37100 3
32 1110 4
m 24 11111 5
k 7 111101 6
z 2 111100 6

허프만 트리(위의 예)는 다음과 같습니다.

데이터 구조의 가상 트리에서 실행