누군가이 두 데이터 구조의 주요 차이점이 무엇인지 설명해 주시겠습니까? 차이점 / 유사점을 강조하는 온라인 소스를 찾으려고했지만 너무 유익한 정보를 찾지 못했습니다. 어떤 경우에 하나가 다른 것보다 선호됩니까? 어떤 실제 상황이 다른 것보다 사용하기 더 좋게 만드는가?
답변:
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 기사에서
AVL 트리의 작동 방식에 대한 아이디어를 얻으려면 이 대화 형 시각화가 도움 이 됩니다.
AVL과 RedBlack Tree는 높이 균형이있는 트리 데이터 구조입니다. 그것들은 매우 유사하며, 실제 차이점은 추가 / 제거 작업시 수행되는 회전 작업 수로 구성됩니다. AVL의 경우 전체적으로 더 균일 한 균형을 유지하기 위해 더 높습니다.
두 구현 모두으로 확장됩니다. O(lg N)
여기서 N은 잎의 수이지만 실제로 AVL 트리는 조회 집약적 인 작업에서 더 빠릅니다. 더 나은 균형을 활용하면 트리 순회가 평균적으로 더 짧습니다. 반면에 삽입 및 삭제 측면에서 AVL 트리는 더 느립니다. 수정시 데이터 구조를 적절하게 재조정하려면 더 많은 회전이 필요합니다.
범용 구현의 경우 (예 : 검색이 작업의 우세한지 명확하지 않음) RedBlack 트리가 선호됩니다. 검색된만큼 자주 데이터 구조가 수정되는 모든 경우에 구현하기 더 쉽고 일반적인 경우에 더 빠릅니다. . 예, TreeMap
및 TreeSet
배킹 RedBlack 나무의 자바 메이크업 사용.
RedBlack 트리의 회전 수가 적다는 사실은 삽입 / 삭제시 더 빠르게 만들 수 있지만 ..... 일반적으로 약간 더 깊기 때문에 삽입 및 삭제시 더 느릴 수도 있습니다. 트리의 한 수준에서 다음 수준으로 이동할 때마다 요청 된 정보가 캐시에없고 RAM에서 검색되어야한다는 큰 변화가 있습니다. 따라서 더 적은 회전으로 얻은 시간은 더 깊이 탐색하고 캐시를 더 자주 업데이트해야하기 때문에 이미 손실 될 수 있습니다. 캐시에서 작동 할 수 있는지 여부는 큰 차이를 만듭니다. 관련 정보가 캐시에있는 경우 추가 수준을 탐색하는 데 필요한 시간에 여러 회전 작업을 수행 할 수 있으며 다음 수준 정보는 캐시에 없습니다. 따라서 RedBlack이 이론적으로 더 빠르며 필요한 작업 만 보면 실제로는 더 느릴 수 있습니다.
내가 본 것에서 AVL 트리는 AVL 트리의 원하는 높이 (Log n)를 얻기 위해 필요한만큼 많은 회전 (가끔 트리를 반복적으로 위로)하는 것 같습니다. 이것은 더 견고하게 균형을 이룹니다.
레드 블랙 트리의 경우 삽입 및 제거를 통해 유지해야하는 5 가지 규칙 세트가 있습니다 . http://en.wikipedia.org/wiki/Red-black_tree에서 찾을 수 있습니다 .
빨강 검정 나무에 도움이 될 수있는 가장 중요한 것은이 다섯 가지 규칙에 따라 삼촌이 빨강이면 나무를 뿌리까지 반복적으로 채색 할 수 있다는 사실입니다. 삼촌이 검은 색이면 문제를 해결하기 위해 최대 2 번의 회전을해야하지만 1 ~ 2 번의 회전 후에는 완료됩니다. 그것을 포장하고 잘 자라고 말하십시오. 그것이 당신이해야 할 조작의 끝이기 때문입니다.
큰 규칙은 5 번입니다 ... '주어진 노드에서 하위 리프로가는 모든 간단한 경로에는 동일한 수의 검은 색 노드가 포함됩니다.'
이렇게하면 나무를 작동시키는 데 필요한 대부분의 회전이 발생하여 나무가 너무 균형을 잃지 않게됩니다.