자가 밸런싱 바이너리 검색 트리

Self-balancing binary search tree
불균형 트리의 예로서 루트에서 노드까지의 경로를 따라가려면 평균 3.27개의 노드에 액세스해야 합니다.
높이 밸런싱 후 동일한 트리로 평균 경로 작업량이 3.00 노드 액세스로 감소

컴퓨터 과학에서 BST(self-balancing binary search tree)는 임의의 항목이 삽입 및 [1]삭제될 때 자동으로 높이(루트 아래의 최대 수준 수)를 작게 유지하는 노드 기반 이진 검색 트리입니다.자가 밸런싱 바이너리 검색 트리를 위해 설계된 이러한 작업에는 이러한 추상 데이터 구조가 "자기 밸런싱" 속성을 수신할 수 있도록 트리 높이가 무한히 증가하는 것에 대한 예방 조치가 포함됩니다.

높이 균형 이진 트리의 경우 높이는 항목 수 n의 On)\ n 정의됩니다.이것은, AVL 트리나 빨강-검은 트리 등, 많은 바이너리 검색 트리의 경우입니다.스플레이 트리 및 트리프는 자체 균형 조정이지만 높이가 항목 수에서 로그가 될 수 없으므로 높이 균형 조정은 되지 않습니다.

셀프밸런싱 바이너리 검색 트리는 변경 가능한 순서 목록을 효율적으로 구현합니다.또한 연관 배열, priority 큐, 세트 등 기타 추상적인 데이터 구조에도 사용할 수 있습니다.

개요

트리 회전은 완벽한 또는 거의 완벽한 균형을 유지하기 위해 자체 밸런싱 바이너리 트리에 대한 매우 일반적인 내부 작업입니다.

BST(Binary Search Tree)의 대부분의 작업은 트리 높이에 정비례하는 시간이 걸리므로 높이를 작게 유지하는 것이 좋습니다.높이가 h인 이진 트리는 최대0 2+21+···+2h = 2-1h+1 노드를 포함할 수 있습니다.노드 수가 n개이고 높이h인 트리는 다음과 같습니다.

그 의미는 다음과 같습니다.

" 2" ( +) - """ 2 " n " " ( n +)-\ \ \ _ {2}n\

즉, 노드가 n개인 바이너리 트리의 최소 높이는 log2(n), 반올림된 값입니다.즉 " 2 """ { style \ \ _ [1] 입니다.

그러나 BST 항목 삽입을 위한 가장 단순한 알고리즘은 다소 일반적인 상황에서 높이가 n인 트리를 생성할 수 있습니다.예를 들어 항목이 정렬된 키 순서로 삽입되면 트리는 n개의 노드를 가진 링크 목록으로 퇴보합니다.두 상황 간의 성능 차이는 매우 클 수 있습니다. 예를 들어 n = 1,000,000일 때 최소 높이는 ( 1 , 000 ) \ \ _ {2 1,,000 ) \ 입니다.

데이터 항목을 미리 알고 있으면 값을 랜덤 순서로 추가하여 높이를 평균적으로 작게 유지할 수 있으며, 결과적으로 랜덤 바이너리 검색 트리가 생성됩니다.다만, 이 랜덤화를 실행할 수 없는 상황(온라인 알고리즘 등)이 많이 있습니다.

셀프밸런싱 바이너리 트리는 키를 삽입할 때 트리에서 변환(트리 회전 등)을 수행하여 높이를 로그(n)2 비례하도록 함으로써 이 문제를 해결합니다.특정 오버헤드가 수반되지만 항상 필요한 룩업 비용보다 크지 않으며 모든 작업을 신속하게 실행함으로써 정당화될 수 있습니다.

BST를 높이로 유지할 수 있으며 예상되는 O )(\ O n 시간 조작(룩업/삽입/제거)을 수행할 수 있지만 이러한 구조를 유지하기 위해 필요한 추가 공간 요건은 검색 시간의 감소를 초과하는 경향이 있습니다.비교를 위해 AVL 트리는 최적 높이의 1.44배 이내이며, 단순한 [1]구현에서는 2비트의 추가 스토리지만 필요합니다.따라서 대부분의 셀프밸런싱 BST 알고리즘은 높이를 이 하한의 일정한 계수 이내로 유지합니다.

점근적("Big-O")의 의미에서 n개의 항목을 포함하는 자기 밸런싱 BST 구조는 O(log n) 최악의 경우 항목의 룩업, 삽입 및 삭제를 가능하게 하며 O(n) 시간에 모든 항목을 순서대로 열거할 수 있다.일부 구현의 경우 이는 작업별 시간 범위이며, 다른 구현의 경우 작업 시퀀스에 걸쳐 상각된 한계입니다.이러한 시간은 비교를 통해서만 키를 조작하는 모든 데이터 구조 중에서 점근적으로 최적입니다.

실장

이러한 유형의 트리를 구현하는 데이터 구조에는 다음이 포함됩니다.

적용들

자가 밸런싱 바이너리 검색 트리는 priority 큐와 같은 순서 목록을 작성하고 유지하기 위해 자연스럽게 사용할 수 있습니다.또한 관련 어레이에도 사용할 수 있습니다. 키와 값의 쌍은 키만 기준으로 순서를 지정하여 삽입할 수 있습니다.이 용량에서 셀프밸런싱 BST는 주요 경쟁사인 해시 테이블에 비해 많은 장점과 단점을 가지고 있습니다.셀프밸런싱 BST의 장점 중 하나는 해시 테이블이 제공하지 않는 키 순서로 항목을 고속(실제로 점근적으로 최적) 열거할 수 있다는 것입니다.한 가지 단점은 동일한 키를 가진 항목이 여러 개 있을 경우 검색 알고리즘이 더 복잡해진다는 것입니다.셀프밸런싱 BST는 해시 테이블(O(n)에 비해 O(log n))보다 최악의 경우 룩업 퍼포먼스가 우수하지만 평균 케이스 퍼포먼스(O(1)에 비해 O(log n))는 저조합니다.

셀프밸런싱 BST를 사용하면 최적의 최악의 점근적 퍼포먼스를 실현하기 위해 가변 순서 리스트를 필요로 하는 알고리즘을 구현할 수 있습니다.예를 들어 바이너리 트리 정렬이 셀프밸런싱 BST로 구현되어 있는 경우, 매우 설명하기가 간단하지만 점근적으로 최적의 O(n log n) 정렬 알고리즘이 있습니다.마찬가지로 계산기하학의 많은 알고리즘은 자기 밸런싱 BST의 변화를 이용하여 선분교차 문제나 점 위치 문제 등의 문제를 효율적으로 해결합니다(단, 평균적인 경우 자기 밸런싱 BST는 다른 솔루션보다 효율이 떨어질 수 있습니다).특히 바이너리 트리 정렬은 캐시 액세스 패턴뿐만 아니라 트리 밸런싱 오버헤드 때문에 Marge Sort, Quick Sort 또는 Humpsort보다 느릴 수 있습니다.)

셀프 밸런싱 BST는 추가 정보를 효율적으로 기록하거나 새로운 작업을 수행하도록 쉽게 확장할 수 있는 유연한 데이터 구조입니다.예를 들어 특정 속성을 가진 각 서브트리 내의 노드 수를 기록할 수 있으므로 O(log n) 시간 내에 해당 속성을 가진 특정 키 범위의 노드 수를 카운트할 수 있다.예를 들어 이러한 확장을 사용하여 데이터베이스 쿼리 또는 기타 목록 처리 알고리즘을 최적화할 수 있습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ a b c 도널드 크누트.The Art of Computer Programming, 제3권: Sorting and Searching, 제2판.애디슨 웨슬리, 1998년 ISBN0-201-89685-0.섹션 6.2.3: 균형 나무, 페이지 458–481.

외부 링크