[data-structures] 레드-블랙 트리와 AVL 트리의 차이점

누군가이 두 데이터 구조의 주요 차이점이 무엇인지 설명해 주시겠습니까? 차이점 / 유사점을 강조하는 온라인 소스를 찾으려고했지만 너무 유익한 정보를 찾지 못했습니다. 어떤 경우에 하나가 다른 것보다 선호됩니까? 어떤 실제 상황이 다른 것보다 사용하기 더 좋게 만드는가?



답변

AVL 나무는 빨강-검정 나무보다 더 엄격한 균형을 유지합니다. AVL 트리에서 루트에서 가장 깊은 잎까지의 경로는 최대 ~ 1.44lg (n + 2) 인 반면, 빨간색 검은 색 트리에서는 최대 ~ 2lg (n + 1)입니다.

결과적으로 AVL 트리에서 조회하는 것이 일반적으로 더 빠르지 만 더 많은 회전 작업으로 인해 삽입 및 삭제 속도가 느려집니다. 따라서 조회 수가 트리에 대한 업데이트 수를 지배 할 것으로 예상되는 경우 AVL 트리를 사용하십시오.


답변

작은 데이터의 경우 :

insert : RB 트리 및 avl 트리는 최대 회전 수가 일정하지만 평균 RB 트리는 회전을 적게 사용하므로 RB 트리가 더 빠릅니다.

lookup : AVL 트리는 깊이가 적기 때문에 AVL 트리가 더 빠릅니다.

delete : RB 트리는 일정한 최대 회전 수를 가지지 만 AVL 트리는 O (log N) 회전을 최악으로 할 수 있습니다. 평균적으로 RB 트리는 회전 수가 적으므로 RB 트리가 더 빠릅니다.

대용량 데이터 :

삽입 : AVL 트리가 더 빠릅니다. 삽입하기 전에 특정 노드를 찾아야하기 때문입니다. 데이터가 많을수록 특정 노드를 찾는 시간 차이가 O (log N)에 비례하여 증가합니다. 그러나 AVL 트리 및 RB 트리는 최악의 경우에도 일정한 회전 수만 필요합니다. 따라서 병목은 특정 노드를 찾는 시간이됩니다.

조회 : AVL 트리가 더 빠릅니다. (작은 데이터의 경우와 동일)

delete : AVL 트리는 평균적으로 더 빠르지 만 최악의 경우 RB 트리가 더 빠릅니다. 제거하기 전에 교체 할 매우 깊은 노드를 찾아야하기 때문입니다 (삽입 이유와 유사). 평균적으로 두 나무는 일정한 회전 수를 가지고 있습니다. 그러나 RB 트리에는 회전에 대한 상수 상한이 있습니다.


답변

이것에서 인용 : AVL과 Red-Black 나무의 차이점

RB- 트리는 AVL 트리와 마찬가지로 자체 균형을 유지합니다. 둘 다 O (log n) 조회 및 삽입 성능을 제공합니다. 차이점은 RB- 트리는 삽입 작업 당 O (1) 회전을 보장한다는 것입니다. 이것이 실제 구현에서 실제로 성능을 저하시키는 것입니다. 단순화 된 RB- 트리는 동적 노드 구조의 오버 헤드를 처리하지 않고 개념적으로 2-3 개의 트리가 됨으로써 이러한 이점을 얻습니다. 물리적으로 RB- 트리는 이진 트리로 구현되고 빨간색 / 검은 색 플래그는 2-3 개의 동작을 시뮬레이션합니다.

따라서 정의에 따라 모든 AVL은 Red-Black의 하위 집합입니다. 구조 조정이나 회전없이 모든 AVL 트리에 색상을 지정하여 Red-Black 트리로 변환 할 수 있어야합니다.


답변

AVL 트리는 둘 다 동일한 작업 집합을 지원 O(log n)하고 기본 작업에 시간이 걸리기 때문에 종종 레드-블랙 트리와 비교 됩니다. 조회 집약적 인 애플리케이션의 경우 AVL 트리는보다 견고하게 균형을 이루기 때문에 레드-블랙 트리보다 빠릅니다. 빨강-검정 나무와 유사하게 AVL 나무는 높이가 균형을 이룹니다. 둘 다 일반적으로 모든 μ ≤ ½에 대해 중량 균형 또는 μ 균형이 아닙니다. 즉, 형제 노드는 매우 다른 수의 자손을 가질 수 있습니다.

AVL 트리 에 대한 Wikipedia 기사에서


답변

나무의 최대 높이는 균형을 유지하는 데 가장 중요합니다. 1.44 * log(n)AVL과 거의 같지만 RB 트리의 경우 2 * log(n). 따라서 문제가 검색 인센티브 일 때 AVL을 사용하는 것이 더 낫다는 결론을 내릴 수 있습니다. 중요한 것은 AVL 및 RB 트리에 대한 또 다른 질문입니다. RB 트리는 낮은 회전 비용으로 무작위 삽입에 직면 할 때 AVL보다 낫지 만 오름차순 데이터를 삽입하는 데 좋은 AVL입니다. 따라서 문제가 삽입 인센티브 인 경우 RB 트리를 사용할 수 있습니다.


답변

AVL 트리의 작동 방식에 대한 아이디어를 얻으려면 대화 형 시각화가 도움 됩니다.

AVL과 RedBlack Tree는 높이 균형이있는 트리 데이터 구조입니다. 그것들은 매우 유사하며, 실제 차이점은 추가 / 제거 작업시 수행되는 회전 작업 수로 구성됩니다. AVL의 경우 전체적으로 더 균일 한 균형을 유지하기 위해 더 높습니다.

두 구현 모두으로 확장됩니다. O(lg N)여기서 N은 잎의 수이지만 실제로 AVL 트리는 조회 집약적 인 작업에서 더 빠릅니다. 더 나은 균형을 활용하면 트리 순회가 평균적으로 더 짧습니다. 반면에 삽입 및 삭제 측면에서 AVL 트리는 더 느립니다. 수정시 데이터 구조를 적절하게 재조정하려면 더 많은 회전이 필요합니다.

범용 구현의 경우 (예 : 검색이 작업의 우세한지 명확하지 않음) RedBlack 트리가 선호됩니다. 검색된만큼 자주 데이터 구조가 수정되는 모든 경우에 구현하기 더 쉽고 일반적인 경우에 더 빠릅니다. . 예, TreeMapTreeSet배킹 RedBlack 나무의 자바 메이크업 사용.


답변

RedBlack 트리의 회전 수가 적다는 사실은 삽입 / 삭제시 더 빠르게 만들 수 있지만 ….. 일반적으로 약간 더 깊기 때문에 삽입 및 삭제시 더 느릴 수도 있습니다. 트리의 한 수준에서 다음 수준으로 이동할 때마다 요청 된 정보가 캐시에없고 RAM에서 검색되어야한다는 큰 변화가 있습니다. 따라서 더 적은 회전으로 얻은 시간은 더 깊이 탐색하고 캐시를 더 자주 업데이트해야하기 때문에 이미 손실 될 수 있습니다. 캐시에서 작동 할 수 있는지 여부는 큰 차이를 만듭니다. 관련 정보가 캐시에있는 경우 추가 수준을 탐색하는 데 필요한 시간에 여러 회전 작업을 수행 할 수 있으며 다음 수준 정보는 캐시에 없습니다. 따라서 RedBlack이 이론적으로 더 빠르며 필요한 작업 만 보면 실제로는 더 느릴 수 있습니다.