빨강-검정 나무를 상상해보십시오. 이를 생성하는 삽입 및 삭제 시퀀스가 ​​항상 있습니까?


41

다음과 같이 빨강-검정 나무의 정의를 가정 해 봅시다.

  1. 이진 검색 트리입니다.
  2. 각 노드는 빨간색 또는 검은 색으로 표시됩니다. 뿌리는 검은 색입니다.
  3. 가장자리로 연결된 두 개의 노드는 동시에 빨간색 일 수 없습니다.
  4. 다음은 위키와 같이 NIL 리프에 대한 좋은 정의입니다 . NIL 잎은 검은 색입니다.
  5. 루트에서 NIL 리프까지의 경로에는 동일한 수의 검은 노드가 포함됩니다.


질문

레드 블랙 트리에 대한 insert및 delete작업을 구현했다고 가정합니다 . 자, 만약 당신이 유효한 레드-블랙 트리를 받았다면, 그것을 구성 하는 시퀀스 insert와 delete연산 이 항상 있습니까?


동기

이 질문은 이것에 의해 동기를 질문 과에서 토론에 의해 이 질문에 .

개인적으로, 나는 당신이 검은 노드로만 구성된 유효한 레드 블랙 트리를 상상한다면 (완전히 균형 잡힌 트리를 상상하고 있음을 의미합니다), 그것을 구성 하는 시퀀스 insert와 delete연산 이 있다고 믿습니다 . 하나,

  1. 나는 그것을 정확하게 증명하는 방법을 모른다
  2. 나는 또한 더 일반적인 경우에 관심이 있습니다

귀하의 질문은 약간 원형으로 들립니다 ... 삽입 및 삭제 작업 집합은 빨강-검정 트리를 구성합니다 ... 빨간색은 정의 일뿐이므로 말 그대로 아무것도 없습니다. 당신의 질문은 순전히 검은 나무로 제한됩니까?
— JOX

2
아뇨, 당신이 오해하는 것 같아요 물론, 모든 삽입 및 삭제 세트는 약간의 검은 색 트리를 구성합니다. 문제는 이것이다 : 어떤 삽입과 삭제 시퀀스에 의해 구성 가능한 정의에 맞는 트리가 있는가? 트리가 주어지면 일련의 삽입 및 삭제를 다시 만들 수 있습니까?
— alisianoi

2
@ all3fox 네, 맞습니다. 작업을 사용하는 알고리즘이 insert와 delete구성하기 위해 검은 색으로 만 노드로 구성된 유효 레드 - 블랙 트리 . 높이 h 의 트리를 만들기 위해 삽입 / 삭제를 사용합니다 . 첫째, 우리는 사용 폭 우선 방식으로 완벽하게 균형 레드 - 블랙 트리 만들 수 있습니다 2 시간 + 1 - 1 개 다음 사용하여 삽입을 시간 * 2 시간을 - 1(h+2)⋅2h−1h2h+1−1h※2h−1삽입과 같은 양의 삭제는 완전히 검은 나무에 다시 칠합니다. 여기서 트릭 은 루트에 도달 할 때까지 트리에서 가장 낮은 빨간색 레이어를 배 위로 올리는 것입니다. h
— Anton Trunov

1
@AntonTrunov 감사합니다, 나는 일종의 이해합니다. 그래도 일반적인 Red-Black Tree의 경우는 어떻습니까? 어떤 Red-Black Tree를 사용 insert하여 delete조작 할 수 있습니까?
— alisianoi

2
가) 대답은의 정확한 구현에 따라 달라집니다 insert및 delete; 이러한 작업을 수행하는 몇 가지 방법이있을 수 있습니다. b) RB 나무는 본질적으로 4 차의 B 나무이기 때문에 영감을 얻을 수 있습니다. RB에서 B로 (또는 뒤로) 맵핑이 고유하지 않기 때문에 세부 사항이 까다로울 수 있습니다.
— Raphael

답변:


2

레드 블랙 트리의 삽입 및 삭제 작업 에는 레드 블랙 속성을 유지하는 데 필요한 균형 조정이 포함 됩니다.

비 (왼쪽 또는 오른쪽) 기울어 진 빨강 검정 나무의 문제점은 기본 삭제 또는 삽입 후 빨강 검정을 복원하는 여러 가지 방법이 있다는 것입니다.
트리를 변형하는 것은 삽입 또는 삭제가 아니라 나중에 트리의 적색을 유지 / 복원하기 위해 발생하는 재조정 및 회전입니다.

레드-블랙 트리에 대한 기본 설명은 어떤 경로를 취할 수 있는지 규정하지 않습니다. 재조정은 결정론적일 필요가 없기 때문에 주어진 레드 블랙 트리
를 정확하게 재구성하는 방법을 알아내는 것이 불가능할 수도 있습니다.

이것은 왼쪽 마른 붉은 검은 나무로 '해결되었습니다'.
밸런싱이 수행되는 방법은 하나뿐입니다. 리 밸런싱 / 회전이 특정 결정 론적 방식으로 수행되기 때문에, 주어진 기울어 진 레드 블랙 트리는 삽입 및 삭제를 사용하여 재구성 될 수 있습니다.

그렇다고해서 좌식 RB- 트리가 더 낫거나 더 효율적이라는 것은 아닙니다. 결정 론적 밸런싱 규칙을 사용하여 얻는 반면,보다 복잡한 밸런싱 코드로 인해 다른 것을 잃게됩니다.


(h+2)⋅2h−1h2h+1−1h※2h−1h 루트에 도달 할 때까지 트리에서 가장 낮은 빨간색 레이어를 곱합니다.

Day-Stout-Warren 과 같은 완벽한 균형 알고리즘 이 더 효율적이라고 생각합니다.


1
오퍼레이션 insert과 deleteCLRS 서적을 사용하여 블랙 노드 로만 구성된 유효한 RB 트리를 빌드 할 수 있습니다 . 트릭은 필요한 것보다 많은 노드 를 삽입 한 다음 과도한 노드를 삭제하는 것입니다. 이 알고리즘 은 적색 노드 를 제거합니다.
— Anton Trunov

@AntonTrunov, 해당 알고리즘에 대한 링크가 있습니까? 답변에 ​​포함시키는 것이 좋습니다. 내 google-fu를 사용하여 찾을 수 없습니다.
— 요한

1
불행히도 나는 링크가 없습니다. 나는 당시 질문에 대답하려고 노력했고 모든 검은 RB 나무의 특별한 경우에 대한 알고리즘을 생각해 냈습니다. 나는 그 의견에 설명했지만 증거를 제공하지는 않았습니다.
— Anton Trunov

"이것은 왼쪽 마른 붉은 검은 나무로 '해결되었습니다"는 무슨 뜻입니까?. 왼쪽으로 마른 붉은 검은 나무조차도 동일한 항목을 저장하는 여러 가지 방법이 있습니다.
— user239558
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.