CFS에서 레드 블랙 트리를 통해 프로세스를 관리하여 탐색시간을 줄인다.
binary search tree를 사용하면 탐색 시 O(logN)의 시간복잡도를 가진다.
하지만..
만약 트리가 편향된다면 어떻게 될까?
binary search tree가 편향된다면, 원소를 찾을 때, O(N)의 시간복잡도를 가지게 된다. 이럴 경우, binary search tree를 유지할 필요가 없다!!
=> 이를 보완하기 위해 자동으로 균형을 맞춰주는 balanced tree가 등장했고, 그 중 하나가 red-black tree다.
빨간색
또는 검은색
으로 칠한다검은색
이다검은색
으로 취급빨간색
노드의 자식들은 검은색
노드다.검은색
노드의 수는 같다b(x)
= x부터 NIL까지 갈 때 거쳐가는 black node의 수 (x 미포함, NIL포함)
서브 트리가 모두 black 노드일 때가 서브 트리의 노드 수가 최소가 될 때이다!!
x를 루트로 하는 서브 트리의 노드 개수를 n(x)
이라고 하자.
n(x) >= 2^(b(x)) -1
를 만족한다.
b(root) >= height/2
를 만족한다.
(기본 규칙 4번과 5번때문에.. ex) b(root) == 3이면, 높이의 최대는 red와 black을 번갈아 가면서 배치한 6이다!)
위 두 식을 합하면 n(root) + 1 >= 2^(height/2)
이 되고, 이 양 변에 로그를 씌우면
height <= 2*log(n(root)+1)
가 된다.
따라서 red-black 트리에서 원소를 탐색할 때 걸리는 시간은 O(logN)
이다!!
새로운 노드를 그대로 추가하면, red-black tree의 기본 규칙에 위배될 수가 있다!
단순히 노드를 추가하는 것이 아니라, 추가적인 동작이 필요하다!
새로운 노드를 삽입할 때는 red
노드를 삽입한다. 그리고 기본 규칙에 위배될 경우, 다음 2가지 방식 중 하나를 수행한다.
어떤 동작을 수행할지는 uncle node(부모의 형제 node)
를 확인한다!
uncle node
가 black node
일 때black node
, 자식 노드는 red node
로uncle node
가 red node
일 때black node
로 만든다.red node
로 만든다.red node
로 만들었을 때, 규칙 4가 위배될 수 있다.평소에 red-black tree에 대한 막연한 개념만 가지고 있었는데, 어떻게 red-black tree가 balanced하게 유지될 수 있는지에 대해서 구체적으로 알게 되었다.