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


41

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

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


질문

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


동기

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

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

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

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

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

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

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

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

답변:


2

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

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

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

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

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


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

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


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

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

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

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