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

데이터 구조의 스플레이 트리

<시간/>

플레이 트리는 최근에 액세스한 요소가 다시 빠르게 액세스할 수 있는 추가 속성이 있는 자체 균형 이진 검색 트리로 정의됩니다. 삽입, 조회 및 제거와 같은 기본 작업은 O(log n) 상각 시간에 splay tree에 의해 수행됩니다. 무작위가 아닌 작업의 많은 시퀀스의 경우 시퀀스의 특정 패턴을 알 수 없는 경우에도 스프레이 트리가 다른 검색 트리보다 더 잘 작동합니다. 이진 검색 트리의 모든 일반 작업은 스플레잉이라고 하는 하나의 기본 작업과 결합됩니다.

각 노드에 대해 실수 키(a)를 저장한다고 가정합니다.

모든 이진 검색 트리에서 노드 a의 왼쪽 하위 트리는 key(a) 값보다 작은 "키" 값을 가진 항목을 포함하고 노드 a의 오른쪽 하위 트리는 key(a) 값보다 높은 "키" 값을 가진 항목을 포함합니다. .

스플레이 트리에서 우리는 먼저 쿼리 항목을 검색합니다. 예를 들어 일반적인 이진 검색 트리에서와 같이 쿼리 항목을 루트의 값과 비교하고, 작으면 왼쪽 하위 트리에서 재귀적으로 검색하고, 그렇지 않으면 더 높으면 재귀적으로 검색합니다. 오른쪽 하위 트리이고 동일하면 완료됩니다. 그런 다음 비공식적으로 말하면 연속적인 조상 f의 모든 분리된 쌍(b =parent(a) 및 c =parent(b))을 살펴보고 특정 쌍의 회전을 수행합니다. 이러한 회전의 결과로 c 대신 가 표시됩니다.

적절한 조상이 홀수인 경우 (루트의 자식인) 의 조상도 별도의 방식으로 처리해야 합니다. 터미널의 경우 — 와 루트 사이의 가장자리를 회전합니다. 이 단계를 지그 단계라고 합니다.

와 b가 각각 부모의 왼쪽 또는 오른쪽 자식이면 먼저 b와 부모 c 사이의 모서리를 회전한 다음 부모 b 사이의 모서리를 회전합니다. 이 단계를 지그-지그 단계라고 합니다.

a가 왼쪽(각각 오른쪽) 자식이고 b가 오른쪽(각각 왼쪽) 자식이면 먼저 와 b 사이에서 가장자리를 회전한 다음 와 c 사이에서 이 단계를 지그재그 단계로 표시합니다.