레드-블랙 트리(RBTree)

레드-블랙 트리(RBTree)

레드-블랙 트리란 무엇입니까?

레드-블랙 트리는 1972년 루돌프 바이어(Rudolf Bayer)가 발명했으며 당시에는 대칭 이진 B-트리라고 불렸습니다.

1978년 Leo J. Guibas와 Robert Sedgewick에 의해 오늘날의 "레드-블랙 트리"로 수정되었습니다.

레드-블랙 트리는 AVL 트리와 유사한 자체 균형 이진 검색 트리이기도 합니다.보다 효율적인 쿼리 성능을 위해 추가 및 삭제 시 회전 작업을 통해 이진 트리의 균형을 유지합니다.

AVL 트리와 비교하여 레드-블랙 트리는 삽입/삭제 작업 중 회전 작업을 줄이는 대가로 균형의 일부를 희생하며 전체적인 성능은 AVL 트리보다 좋습니다.

RBTree는 복잡하지만 최악의 경우 실행 시간도 매우 좋으며 실제로는 효율적입니다.

그것은 할 수 있다O(log n) 시간 내에 검색, 삽입 및 삭제합니다. 여기서 n은 트리의 요소 수입니다..

레드-블랙 트리의 특성

레드-블랙 트리는 실제 응용에서 가장 일반적으로 사용되는 균형 이진 검색 트리입니다.엄격하게 균형이 잡혀 있지는 않지만 평균 사용 성능은 매우 좋습니다.

레드-블랙 트리에서는 노드에 빨간색과 검은색 레이블이 지정됩니다.

레드-블랙 트리의 원리는 다음과 같습니다.
특성 1: 노드는 검정색이거나 빨간색입니다.
특성 2: 루트 노드는 검정색이어야 합니다.
특성 3: 리프 노드(NIL)는 검정색이어야 합니다.
특성 4: 각 노드의 두 자식 노드입니다. 빨간색 노드는 모두 검은색입니다. (각 리프에서 루트까지의 모든 경로에 두 개의 연속된 빨간색 노드가 있을 수 없습니다.)
특징 5:모든 노드에서 각 리프까지의 모든 경로에는 동일한 수의 검정색 노드가 포함됩니다.

빨간색 속성은 빨간색 노드의 자식이 검정색이어야 함을 나타냅니다. 그러나 RBTree 검정 노드의 하위 노드는 빨강 또는 검정일 수 있습니다.

리프 속성 설명, 리프 노드는 비어 있을 수 있습니다.AVL의 리프 노드가 비어 있지 않습니다.영상

위의 원칙을 바탕으로 우리는일반적으로 Red-Black 트리 노드를 삽입하면 노드가 빨간색으로 설정됩니다.,

**이유: **마지막 원칙 참고: 빨간색은 원칙을 파괴할 가능성이 가장 낮습니다. 검은색인 경우 이 가지의 검은색 노드가 다른 가지보다 1개 더 많아 균형이 파괴될 가능성이 높습니다.

기억 포인트:
괄호 안의 분류에 따라 레드-블랙 트리의 여러 원칙을 기억할 수 있습니다.
( Color 속성 ) 속성 1: 노드는 검정색이거나 빨간색입니다
( Root 속성 ) 속성 2: 루트 노드는 검정색이어야 합니다
( Leaf 속성) ) 속성 3: 리프 노드(NIL)는 검정색이어야 합니다
( 빨간색 특성 ) 속성 4: 각 빨간색 노드의 두 하위 노드는 모두 검정색입니다. (각 리프에서 루트까지의 모든 경로에 두 개의 연속된 빨간색 노드가 있을 수 없습니다.)
( Black 속성 ) 속성 5: 모든 노드에서 각 리프까지의 모든 경로에는 동일한 수의 검정색 노드가 포함됩니다.

검은색 특성은 균형 잡힌 특성으로 이해될 수 있습니다., 균형 특성을 충족할 수 없는 경우 균형 조정 작업을 수행해야 합니다.

시공간
RBT는 다소 종류가 있습니다.시공간형 최적화, avl 노드에 추가됨색상 속성 데이터, 이는 공간 소비를 늘리는 것과 같습니다. 색상 속성을 높이면 후속 균형 조정 작업 수가 줄어듭니다.

검정색의 완벽한 균형

레드-블랙 트리는 AVL 균형 이진 검색 트리가 아니며 그림에서 볼 수 있듯이 루트 노드 P의 왼쪽 하위 트리가 오른쪽 하위 트리보다 분명히 높습니다.

레드-블랙 트리의 특성 5에 따르면, 모든 노드에서 각 리프까지의 모든 경로에는 동일한 수의 블랙 노드가 포함됩니다. 이는 다음을 의미합니다.
rbt의 왼쪽 하위 트리와 오른쪽 하위 트리에 있는 블랙 노드의 수준 수는 동일합니다.
레드-블랙 트리의 평형 조건은,전체 높이에 의해 제한되지 않고 검정색 노드의 높이에 의해 제한됩니다..
따라서 이러한 레드-블랙 트리의 균형을 다음과 같이 부릅니다.검정색의 완벽한 균형
영상

완벽하게 균형 잡힌 검정색의 효과를 보려면
rbt에서 빨간색 노드를 제거하면 다음과 같은 결과를 얻을 수 있습니다.쿼드트리, 루트 노드에서 각 리프까지의 높이는 동일하며, 이는 rbt의 루트에서 리프까지의 검은색 경로의 길이입니다.
영상

레드-블랙 트리 복원 밸런스 프로세스의 세 가지 작업

레드-블랙 트리의 5원칙이 충족되지 않으면 균형이 깨진 것으로 간주합니다. 균형을 어떻게 회복할 수 있을까요? 세 가지 작업을 활용해 보세요.색상 변경, 왼쪽 회전, 오른쪽 회전

변색

노드의 색상은 빨간색에서 검정색으로 또는 검정색에서 빨간색으로 변경됩니다.

왼손잡이

특정 노드를 피벗(피벗)으로 사용하면 해당 상위 노드(하위 트리의 루트)가 자체 왼쪽 하위 트리(왼손잡이)로 회전되고, 피벗의 원래 왼쪽 하위 트리는 원래 루트 노드의 오른쪽 하위 트리가 됩니다. 피벗의 원래 왼쪽 하위 트리는 원래 루트 노드의 오른쪽 하위 트리가 되며, 오른쪽 하위 트리는 변경되지 않습니다.영상

오른쪽 회전:

특정 노드를 지점(피벗)으로 사용하면 해당 상위 노드(하위 트리의 루트)가 자체 오른쪽 하위 트리로 회전됩니다(오른쪽 회전). 피벗의 원래 오른쪽 하위 트리는 원래 루트 노드의 왼쪽 하위 트리가 됩니다. 피벗의 원래 왼쪽 하위 트리는 변경되지 않은 상태로 유지됩니다.영상

레드-블랙 트리의 좌회전 및 우회전 연산은 AVL 트리의 좌회전 및 우회전 연산과 유사합니다.

레드-블랙 트리 노드 삽입

영상

영상

기본적으로 새로 삽입된 노드는 빨간색입니다.:
부모 노드가 검은색일 확률이 높기 때문에 새 노드를 빨간색으로 삽입하면 색상 충돌을 피할 수 있습니다.

장면 1:레드-블랙 트리는 빈 트리이다

삽입된 노드를 루트 노드로 사용하면 됩니다.

추가: 레드-블랙 트리의 속성에 따르면 두 루트 노드는 검정색입니다. 아직도 필요하다삽입된 노드를 검정색으로 설정

시나리오 2:삽입된 노드의 키가 이미 존재합니다.

현재 노드의 값을 삽입된 노드의 값으로 업데이트합니다.

시나리오 3:삽입된 노드의 부모 노드는 검정색입니다.

삽입된 노드가 레드이므로, 삽입된 노드의 부모 노드가 블랙일 경우 레드-블랙 트리의 균형에는 영향을 미치지 않습니다.자체 균형 조정 없이 직접 삽입

시나리오 4:삽입된 노드의 상위 노드는 빨간색입니다.

속성 2에 따르면 루트 노드는 검정색입니다.
삽입된 노드의 상위 노드가 레드 노드인 경우상위 노드는 루트 노드가 될 수 없으므로 삽입된 노드는 항상 조부모 노드(3세대 관계)를 갖습니다.

속성 4에 따르면 각 빨간색 노드의 두 자식 노드는 검정색이어야 합니다. 두 개의 빨간색 노드가 연결될 수 없습니다.

이때
아버지와 삼촌은 빨간색,
아버지는 빨간색, 삼촌은 검은 색이라는 두 가지 상태가 나타납니다.

장면 4.1: 아버지와 삼촌이 레드 노드입니다.

속성 4에 따르면: 빨간색 노드는 연결할 수 없습니다 ==》상위 노드는 블랙 노드여야 합니다.:
아버지가 레드라면, 이때 하위 트리에 삽입되어야 하는 레드-블랙 트리 수준의 수는 블랙, 레드, 레드입니다.

왜냐하면두 개의 빨간색 노드를 동시에 연결하는 것은 불가능하므로 변경해야 합니다.

변색 처리: == 검정 빨강 빨강> 빨강 검정 빨강

  1. F 및 V 노드를 검정색으로 변경합니다.
  2. P를 빨간색으로 변경
  3. 후속 처리를 위해 P를 현재 노드로 설정
    영상

P가 red로 설정되어 있음을 알 수 있는데,
P의 부모 노드가 black이면 처리가 필요하지 않지만,
P의 부모 노드가 red이면 red-black 트리의 특성에 위배되므로 P는 처리가 필요합니다. 현재 노드로 설정됩니다. 전체 균형이 달성될 때까지 삽입 작업을 계속하고 자체 균형 처리를 수행합니다.

장면 4.2: 삼촌은 검은색이고 아버지는 빨간색이며 아버지의 왼쪽 노드에 삽입됩니다.

삼촌은 흑인이거나 존재하지 않습니다(NIL).또한 블랙 노드이기도 하며,노드의 부모 노드는 조부모 노드의 왼쪽 자식 노드입니다.
참고: 순수 삽입 관점에서 보면 삼촌 노드는 빨간색 또는 검정색(NIL 노드)이며, 그렇지 않으면 빨간색-검정 트리 속성 5가 파괴됩니다. 이때 경로에는 다른 경로보다 하나 더 많은 검정색 노드가 있습니다. .
영상

시나리오 4.2.1 LL 유형 불균형

새로 삽입된 노드는 상위 노드의 왼쪽 자식 노드입니다.(LL 빨간색 케이스) 삽입 후 LL 유형 불균형이 발생합니다.

영상

자체 균형 처리:

  1. 색상 변경:
    F를 검정색으로, P를 빨간색으로 설정
  2. F 노드를 우회전
    영상
시나리오 4.2.2 LR 유형 불균형

새로 삽입된 노드는 상위 노드의 오른쪽 자식 노드입니다.(LR 빨간색 케이스) 삽입 후 LR 유형 불균형이 발생합니다.

영상
자체 균형 처리:

  1. 좌회전 F
  2. F를 현재 노드로 설정하고 LL 빨간색 케이스를 얻습니다.
  3. LL적색 상황에 따른 가공 (1.변색 2.우측 P절)
    영상
시나리오 4.3: 삼촌은 블랙 노드이고, 아버지는 레드이며, 아버지 노드는 할아버지 노드의 오른쪽 자식 노드입니다.

영상

시나리오 4.3.1: RR 유형 불균형

새로 삽입된 노드는 상위 노드의 오른쪽 하위 노드입니다(RR 빨간색 케이스).
영상

자체 균형 처리:

  1. 색상 변경:
    F를 검정색으로, P를 빨간색으로 설정
  2. P 노드에서 왼쪽 회전 수행
    영상
시나리오 4.3.2: RL 유형 불균형

새로 삽입된 노드는 상위 노드의 왼쪽 하위 노드입니다(RL 빨간색 케이스).
영상

자체 균형 처리:

  1. 우회전 F
  2. RR 빨간색 상황을 얻으려면 F를 현재 노드로 설정하십시오.
  3. RR 적색 상황에 따른 처리 (1. 변색 2. 왼손잡이 P 노드)
    영상

레드-블랙 트리 노드 삭제

레드-블랙 트리 삭제 작업에는 두 가지 작업 부분도 포함됩니다.

  • 대상 노드 찾기
  • 삭제 후 자체 균형 조정

대상 노드가 존재하지 않는 경우 이 작업은 무시되고, 대상 노드가 존재하는 경우 삭제 후 자체 균형 처리를 수행해야 합니다. 노드를 삭제한 후에도 삭제된 노드를 대체할 노드를 찾아야 합니다. 그렇지 않으면 하위 트리가 상위 노드에서 연결이 끊어집니다. 삭제된 노드에 하위 노드가 없는 경우를 제외하고는 대체할 필요가 없습니다.

영상

영상
알아채다:R은 삭제된 노드의 위치에서 교체될 교체 노드로, 삭제 전 원래 위치에서 트리의 하위 밸런싱에 참여하고 밸런싱 후에는 삭제된 노드의 위치에서 교체된다. 삭제가 완료되기 전에

사례 1: 교체 노드가 레드 노드입니다.

대체 노드가 삭제된 노드의 위치로 이동하는 경우 대체 노드는 레드이므로 삭제가 레드-블랙 트리의 균형에 영향을 미치지 않으며 대체 노드의 색상을 삭제된 노드의 색상으로 설정하기만 하면 됩니다. 다시 시작하려면 노드를 삭제했습니다.

처리 :색상이 삭제된 노드의 색상으로 변경됩니다.

사례 2: 교체 노드는 블랙 노드입니다.

교체 노드가 블랙이면 자체 균형 처리를 수행해야 합니다.트리 균형을 재조정하기 위해 다른 회전 작업을 수행하려면 교체 노드가 상위 노드의 왼쪽 자식 노드인지 오른쪽 자식 노드인지 고려하세요.

사례 2.1: 대체 노드는 상위 노드의 왼쪽 하위 노드입니다.
사례 2.1.1: 대체 노드의 형제 노드는 레드 노드입니다.

형제 노드가 빨간색 노드인 경우 속성 4에 따라 형제 노드의 부모 노드와 자식 노드는 검정색이어야 합니다. 따라서
다음을 처리하십시오 .

  • S를 검정색으로 설정
  • P를 빨간색으로 설정
  • 시나리오 2.1.2.3을 얻으려면 P에서 왼쪽 회전을 수행하십시오.
  • 2.1.2.3 사건 처리

영상

사례 2.1.2: 대체 노드의 형제 노드가 검정색임

형제 노드가 검은색이면 부모 노드와 자식 노드의 색상을 결정할 수 없습니다.

사례 2.1.2.1: 대체 노드의 형제 노드의 오른쪽 자식 노드는 빨간색이고 왼쪽 자식 노드는 임의의 색상입니다.

대체 노드는 검정색이며, 삭제 후 왼쪽 하위 트리에는 검정색 노드가 하나 적어지고 오른쪽 하위 트리에서 검정색 노드를 빌려와 왼쪽으로 회전해야 합니다.
처리 :

  • S의 색상을 P의 색상으로 설정
  • P를 검정색으로 설정
  • SR을 검정색으로 설정
  • P를 왼쪽으로 회전
    영상
    하고 R을 삭제하면 아무런 효과가 없습니다.
사례 2.1.2.2: 대체 노드의 형제 노드의 오른쪽 자식 노드는 검정색이고 왼쪽 자식 노드는 빨간색입니다.

R이 삭제되면 균형에 영향을 주지 않도록 오른쪽 노드에서 레드 노드를 빌려야 하므로 사례 2.1.2.2를 사례 2.1.2.1로 변환하는 것을 고려하십시오.
처리 :

  • S를 빨간색으로 설정
  • SL을 검정색으로 설정
  • 우회전 S는 시나리오 2.1.2.1을 제공합니다.
  • 시나리오 2.1.2.1 처리 수행
    영상
사례 2.1.2.3: 대체 노드의 형제 노드의 하위 노드는 모두 검은색입니다.

이 경우에는 형제의 레드 노드를 빌려주지 않으므로 레드 노드를 얻을 수 있는 다른 곳을 찾아야 하며, 그러다가 아래에서 위로 자라는 레드-블랙 트리의 특성상 P를 다음과 같이 사용할 수 있다고 생각했습니다. 노드 추가와 마찬가지로 새 노드 노드를 교체하지만 실제로는 R이 삭제됩니다. P를 대체 노드로 취급하고 위의 상황을 아래에서 위로 반복하면 됩니다.

  • S를 빨간색으로 설정
  • P를 새 대체 노드로 사용

  • 노드 삭제 시나리오 처리를 다시 실행합니다 .
    영상
사례 2.2: 대체 노드는 상위 노드의 오른쪽 자식입니다.

사례 2.1과 유사하게 이는 후속 노드를 대체 노드로 사용하여 처리됩니다.

사례 2.2.1: 대체 노드의 형제 노드가 빨간색입니다.

처리 :

  • S를 검정색으로 설정
  • P를 빨간색으로 설정
  • 시나리오 2.2.2.3을 얻으려면 P에서 오른쪽 회전을 수행하십시오.
  • 시나리오 2.2.2.3 처리 수행
    영상
사례 2.2.2: 대체 노드의 형제 노드가 검정색임
사례 2.2.2.1: 대체 노드의 형제 노드의 왼쪽 자식 노드는 빨간색 노드이고 오른쪽 자식 노드는 임의의 색상입니다.

처리 :

  • S의 색상을 P의 색상으로 설정
  • P를 검정색으로 설정
  • SL을 검정색으로 설정
  • 우회전 P
    영상
사례 2.2.2.2: 대체 노드의 형제 노드의 왼쪽 자식 노드는 검정색이고 오른쪽 자식 노드는 빨간색입니다.

처리 :

  • S를 빨간색으로 설정
  • SR을 검정색으로 설정
  • 시나리오 2.2.2.1을 얻으려면 S에서 왼쪽 회전을 수행하십시오.
  • 시나리오 2.2.2.1 처리 수행
    영상
사례 2.2.2.3: 대체 노드의 형제 노드의 하위 노드는 모두 검은색입니다.

처리 :

  • S를 빨간색으로 설정
  • P를 새 대체 노드로 사용
  • 노드 삭제 시나리오 재처리
    영상
규칙 요약
  • 루프 조건: x != root && x.color = BLACK, x는 루트 노드가 아니며 색상은 검정색입니다.
  • 마무리 작업: x를 검정색으로 설정
  • x는 아버지의 왼쪽 아들 또는 오른쪽 아들이고 처리 작업은 대칭이므로 마찬가지로 왼쪽 아들의 작업만 기억하면 추론이 가능합니다.

x는 아버지의 왼쪽 아들이다

  • 형제는 빨간색입니다. 형제는 검정색으로, 부모 노드는 빨간색으로 변경됩니다. 부모 노드를 왼쪽으로 회전하여 왼쪽 하위 트리의 검정색 높이를 복원하고 왼쪽 조카가 새 형제가 됩니다.
  • 형제는 검은색이고 왼쪽과 오른쪽 조카는 검은색입니다. 형제는 빨간색이 되고 x는 부모 노드를 가리키며 조정이 계속됩니다.
  • 형제는 검정, 오른쪽 조카는 검정(왼쪽 조카는 빨강): 왼쪽 조카는 검정, 형제는 빨강, 형제는 오른쪽으로 회전하여 오른쪽 하위 트리의 검정 높이를 복원하고 왼쪽 조카가 새 조카가 됨 형제
  • 형제는 검은색이고 오른쪽 조카는 빨간색입니다. 형제는 부모 노드의 색상이 되고 부모 노드와 오른쪽 조카는 검은색이 됩니다. 부모 노드는 왼쪽으로 회전하고 x는 전체 트리의 루트 노드를 가리키며 끝납니다. 고리

RBT 인터뷰 질문:

질문: 이진 검색 트리에서 이진 트리의 균형을 유지해야 하는 이유는 무엇입니까?

이진 탐색 트리는 체인으로 쉽게 퇴화되며,
이 때 탐색의 시간 복잡도도 O(log n)에서 O(N)으로 퇴화된다.
왼쪽과 왼쪽 높이 차이에 제한이 있는 균형 이진 트리 AVL 최적의 검색 작업을 보장하기 위해 오른쪽 하위 트리가 도입되었으며 나쁜 시간 복잡도도 O(log n)입니다.

질문: 균형 이진 트리에서 레드-블랙 트리가 필요한 이유는 무엇입니까?

AVL의 왼쪽 서브트리와 오른쪽 서브트리의 높이 차이는 1을 초과할 수 없으며, 삽입/삭제 작업을 수행할 때마다 균형을 유지하기 위해 회전 작업이 거의 필요합니다
. AVL 성능
Red Black Trees는 삽입/삭제 중 약간의 회전을 위해 엄격한 균형을 희생합니다.

전반적인 성능은 AVL보다 낫습니다.

  • 레드-블랙 트리를 삽입할 때의 불균형은 2회전 이하로 해결될 수 있으며, 삭제 시의 불균형은 3회전 이하로 해결될 수 있습니다.
  • 레드-블랙 트리의 레드-블랙 규칙 은 최악의 경우 O(log n) 시간 내에 검색
    작업이 완료될 수 있도록 보장합니다.
질문: 아직도 레드-블랙 트리의 원리를 기억하시나요?

괄호 안의 분류를 따르고 레드-블랙 트리의 몇 가지 원칙을 기억할 수 있습니다.

  • (색상 속성) 노드는 검은색 또는 빨간색입니다.
  • (루트 속성) 루트 노드는 검정색이어야 합니다.
  • (리프 특성) 리프 노드(NIL)는 검정색이어야 합니다.
  • (빨간색 속성) 각 빨간색 노드의 두 하위 노드는 모두 검은색입니다. (각 리프에서 루트까지의 모든 경로에 두 개의 연속된 빨간색 노드가 있을 수 없습니다.)
  • (검은색 속성) 모든 노드에서 각 잎까지의 모든 경로에는 동일한 수의 검은색 노드가 포함됩니다.
Q: 레드-블랙 트리의 내부 작업은 무엇입니까?

변색
빨간색 노드를 검은색으로 바꾸거나 검은색 노드를 빨간색으로 바꾸는 것이 이 노드의 변색입니다.
회전하다
균형 이진 트리의 회전 작업과 유사합니다.

레드-블랙 트리와 AVL 트리의 차이점
  1. 균형을 조정하는 메커니즘은 서로 다르며,
    레드-블랙 트리는 경로의 일관된 검은색 노드 수를 기준으로 불균형 여부를 판단하고, 균형이 맞지 않으면 색상 변경 및 회전을 통해 복원합니다.

AVL은 트리의 균형 인자(모든 노드의 왼쪽과 오른쪽 하위 트리의 높이 차이의 절대값이 1을 초과하지 않음)를 기준으로 불균형 여부를 판단하고, 불균형이면 회전을 통해 복원합니다.

  1. 레드-블랙 트리 삽입 효율이 더 높습니다.

레드-블랙 트리는 노드를 추가하고 삭제할 때 회전 수를 줄이기 위해 엄격하지 않은 균형을 사용합니다. 모든 불균형은 3회전 이내에 해결됩니다.

레드-블랙 트리는 "완전한 균형"을 추구하지 않고 부분적인 균형 요구 사항만 필요하므로 회전 요구 사항이 줄어들어 성능이 향상됩니다.

AVL은 엄격하게 균형 잡힌 트리(고균형 이진 검색 트리)이므로 노드를 추가하거나 삭제할 때 상황에 따라 레드-블랙 트리보다 회전 수가 더 많습니다.

따라서 레드-블랙 트리의 삽입 효율이 더 높습니다.

3. 레드-블랙 트리의 통계적 성능은 AVL 트리보다 높으며,
레드-블랙 트리는 O(log n) 시간 복잡도로 쿼리, 삽입, 삭제 작업을 수행할 수 있습니다.
AVL 트리 조회, 삽입 및 삭제는 평균 및 최악의 경우 모두 O(log n)입니다.

Red-Black Tree의 알고리즘 시간 복잡도는 AVL과 동일하지만 통계적 성능은 AVL 트리보다 높습니다.

4. 적용성 : AVL 검색 효율성이 높다.
애플리케이션에서 쿼리 수가 삽입 및 삭제보다 훨씬 많으면 AVL 트리를 선택하고, 쿼리 및 삽입 및 삭제 수가 거의 동일하면 AVL 트리를 선택해야 합니다. 레드-블랙 트리.

즉, 검색하지 않고 단지 정렬(생성-횡단-삭제)만을 위한 경우도 있고, 검색 횟수가 매우 적기 때문에 RB 트리가 더 비용 효율적입니다.

레드-블랙 트리 VS AVL 트리

일반적인 균형 트리에는 레드-블랙 트리와 AVL 균형 트리가 포함되는데 STL과 Linux 모두 균형 트리 구현으로 레드-블랙 트리를 사용하는 이유는 무엇입니까? 아마도 다음과 같은 몇 가지 이유가 있을 것입니다.

  1. 구현 세부 사항을 보면 노드 삽입으로 인해 트리가 불균형해지면 AVL 트리와 레드-블랙 트리 모두 최대 2번의 회전 작업, 즉 둘 다 O(1)이 필요합니다. 밸런싱 시 최악의 경우 AVL은 삭제된 노드에서 루트까지의 경로에 있는 모든 노드의 균형을 유지해야 하므로 필요한 회전 크기는 O(logN)인 반면 RB-Tree는 최대 3번의 회전만 필요하며 O(1) 복잡성만 필요합니다.

  2. 두 개의 균형 트리의 균형 요구 사항 관점에서 볼 때 AVL의 구조는 RB-Tree의 구조보다 더 균형이 잡혀 있으며 노드 삽입 및 삭제로 인해 트리의 불균형이 발생할 가능성이 더 높습니다. 따라서 많은 양의 데이터가 필요한 경우 삽입하거나 삭제하려면 AVL이 필요합니다. 재조정 빈도가 높아집니다. 따라서 많은 수의 노드를 삽입하고 삭제해야 하는 시나리오에서는 RB-Tree가 더 효율적입니다. 당연히 AVL은 균형이 잘 잡혀 있으므로 AVL의 검색 효율성이 더 높습니다.

  3. 일반적으로 RB-tree의 통계적 성능은 AVL보다 높습니다.

추천

출처blog.csdn.net/u010523811/article/details/132768469