알고리즘 스터디 탐색
Transcript of 알고리즘 스터디 탐색
![Page 1: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/1.jpg)
탐색
DevRookie
프로모션(권승진)
![Page 2: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/2.jpg)
목차
• 탐색의 의미
• 순차 탐색
• 이진 탐색
• 이진 탐색 트리
• 레드 블랙 트리
![Page 3: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/3.jpg)
탐색의 의미
• 탐색– 드러나지 않은 사물을 찾아내기 위하여 살피어 찾음
– 컴퓨터에서는 ‘데이터’를 찾아내는 과정
![Page 4: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/4.jpg)
탐색의 의미
• 탐색– 드러나지 않은 사물을 찾아내기 위하여 살피어 찾음
– 컴퓨터에서는 ‘데이터’를 찾아내는 과정
![Page 5: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/5.jpg)
탐색의 의미
• 종류– 비정렬 데이터에서의 검색
– 정렬 “
– 탐색을 위해 자료구조 자체를 새로 구성
![Page 6: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/6.jpg)
순차 탐색
![Page 7: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/7.jpg)
순차 탐색
[0] [1] [2] [3] [4] [5] ……
배열
여기 있니???
없구나. 다음
![Page 8: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/8.jpg)
순차 탐색
[0] [1] [2] [3] [4] [5] ……
배열
그럼 여기 있니???
없구나. 다음
![Page 9: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/9.jpg)
순차 탐색
[0] [1] [2] [3] [4] [5] ……
배열
그럼 여기 있니???
여기있네!!!!?
![Page 10: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/10.jpg)
순차 탐색
• 처음부터 끝까지 모든 요소를 검사
• 정렬되지 않는 데이터 집합에서
사용 가능한 유일한 탐색 방법
![Page 11: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/11.jpg)
순차 탐색
• 코드로 치면 이런 식..
![Page 12: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/12.jpg)
순차 탐색
• 최악의 경우
– 수행시간은 O(n)
[0] [1] [2] [3] [4] [n]……
아~이런! 제일
마지막에 있었구나!
![Page 13: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/13.jpg)
순차 탐색
• 순차도 조금 최적화를 해보고 싶다!
• 자주 찾는 물건은 시작점에 가까운 곳으로!
![Page 14: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/14.jpg)
순차 탐색
• 자기 구성 순차 탐색
– 전진 이동법
– 전위법
– 빈도 계수법
![Page 15: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/15.jpg)
순차 탐색
• 자기 구성 순차 탐색
– 전진 이동법(Move to front method)
• hit 했을 때 제일 앞으로 옮김.
• 예) 40 검색 시
10 20 50 40 15 20013
찾았다 40! 다음에 빨리 찾도록
맨 앞으로 옮겨놔야지!!!!
![Page 16: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/16.jpg)
순차 탐색
• 자기 구성 순차 탐색
– 전진 이동법(Move to front method)
10 2040 15 2001350
한번 탐색된 항목이 또 다시 검색될 가능성이 높은 데이터 집합에만 사용
![Page 17: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/17.jpg)
순차 탐색
• 자기 구성 순차 탐색
– 전진 이동법(Move to front method)
• 한번 탐색된 항목이 또 다시 검색될 가능성이 높은
데이터 집합에만 사용
• 배열에서는 엄청 비효율적일 듯…
![Page 18: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/18.jpg)
순차 탐색
• 자기 구성 순차 탐색
– 전위법(Transpose method)
• hit 했을 때 한 칸 앞자리로 옮김.
• 예) 40 검색 시
10 20 50 40 15 20013
찾았다 40!
40의 우선순위를 올려야겠어!!
![Page 19: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/19.jpg)
순차 탐색
• 자기 구성 순차 탐색
– 전위법(Transpose method)
• hit 했을 때 한 칸 앞자리로 옮김.
• 예) 40 검색 시
10 20 15 200135040
![Page 20: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/20.jpg)
순차 탐색
• 자기 구성 순차 탐색
– 전위법(Transpose method)
• 탐색이 여러 번 진행되면?
![Page 21: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/21.jpg)
순차 탐색
• 자기 구성 순차 탐색
– 계수법
• 탐색횟수를 별도의 공간에 저장해두고, 그것을 토
대로 재구성 하는 알고리즘.
• 엄청 민주적이지만, 비용이…
![Page 22: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/22.jpg)
순차 탐색
• 정리
– 처음부터 끝까지!
– 정렬되지 않는 집합에서 탐색은 이 방법밖에!!
– 자기 구성 순차 탐색
![Page 23: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/23.jpg)
순차 탐색
• 한가지 더 짚고 넘어갈 것??
![Page 24: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/24.jpg)
이진 탐색
![Page 25: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/25.jpg)
집합이 정렬되어 있다면
순차보다 좋은 방법이 있다!!!
![Page 26: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/26.jpg)
이진 탐색
• 정렬된 데이터라면 ‘범위’라는
개념으로 줄여나갈 수 있다.
– 예) 15을 찾는다면,
10 13 15 20 40 50 200
배열 정중앙을 보니 20이네!!
정렬된 데이터니까 0~정중앙 사이에 있겠네!!?
![Page 27: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/27.jpg)
이진 탐색
• 정렬된 데이터라면 ‘범위’라는
개념으로 줄여나갈 수 있다.
– 예) 15을 찾는다면,
10 13 15 20 40 50 200
![Page 28: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/28.jpg)
이진 탐색
• ‘범위’의 개념을 이용한 이진 탐색
1. 중앙 요소를 고른다.
10 13 15 20 40 50 200
예) 15을 찾는다면,
배열크기 : 7
절반 : 3
![Page 29: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/29.jpg)
이진 탐색
• ‘범위’의 개념을 이용한 이진 탐색
2. 중앙의 값와 Target값을 비교
10 13 15 20 40 50 200
예) 15을 찾는다면,
15 < 20
![Page 30: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/30.jpg)
이진 탐색
• ‘범위’의 개념을 이용한 이진 탐색3. 값을 찾을 때까지 절반이 된 범위에 1~3적용
10 13 15 20 40 50 200
배열크기 : 3
절반 : 1
![Page 31: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/31.jpg)
이진 탐색
• ‘범위’의 개념을 이용한 이진 탐색
3. 값을 찾을 때까지 절반이 된 범위에 1~3적용
예) 15을 찾는다면,
10 13 15 20 40 50 200
15 > 13
![Page 32: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/32.jpg)
이진 탐색
• ‘범위’의 개념을 이용한 이진 탐색
3. 값을 찾을 때까지 절반이 된 범위에 1~3적용
예) 15을 찾는다면,
10 13 15 20 40 50 200
15 == 15
![Page 33: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/33.jpg)
이진 탐색
• 한번 비교할 때마다 범위가 절반씩 주네!!!
배열의 크기가 N일 때 탐색시마다 범위는???
N/2 N/4 N/16첫 탐색 시 두 번째 탐색 시 세번째 탐색 시
![Page 34: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/34.jpg)
이진 탐색
• 한번 비교할 때마다 범위가 절반씩 주네!!!
배열의 크기가 N이고, 탐색횟수를 x라 했을때
x번째에 데이터 범위 =
![Page 35: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/35.jpg)
이진 탐색
• 한번 비교할 때마다 범위가 절반씩 주네!!!
최악의 경우는
= 1일 경우
![Page 36: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/36.jpg)
이진 탐색
![Page 37: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/37.jpg)
이진 탐색
• 즉, 최악의 시간은 log2n
• 예를 들자면,• 100만개의 데이터에서 20회
• 1,000만 개의 데이터에서 23회
![Page 38: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/38.jpg)
이진 탐색
• 정렬 할 수만 있다면…
– 순차와 비교도 안 되는 압도적인 속도
![Page 39: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/39.jpg)
이진 탐색
• 코드로 보면..
![Page 40: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/40.jpg)
이진 탐색
• 코드로 보면..
링크드 리스트의 정 중앙에 어떻게 접근해..
![Page 41: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/41.jpg)
이진 탐색
• 동적으로 크기가 변경되는 자료구조여야 한다면..
![Page 42: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/42.jpg)
이진 탐색 트리
![Page 43: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/43.jpg)
이진 트리
• 종류– 비정렬 데이터에서의 검색
– 정렬 “
–탐색을 위해 자료구조
자체를 새로 구성
![Page 44: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/44.jpg)
이진 트리
• 개념
–데이터를 한번 가공(자료구조
셋팅) 후 삽입, 삭제, 탐색이
용이하도록 만듬
![Page 45: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/45.jpg)
이진 트리
• 특성– 루트가 있고, 2개의 자식을 가짐
– 어떤 노드의 키 값은 왼쪽 자식보다 크고, 오른쪽 자식보다 작다.
– 키 중복 불가
![Page 46: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/46.jpg)
이진 트리
• 특성
– 35를 탐색한다?
음 30보다 크군 그럼 오른쪽으로
< 35
> 35
음 40보다 작군 그럼 왼쪽으로
![Page 47: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/47.jpg)
이진 트리
• 삽입 과정
![Page 48: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/48.jpg)
이진 트리
• 삭제 과정 (지우는 노드가 리프 노드인 경우)
![Page 49: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/49.jpg)
이진 트리
• 삭제 과정(지우는 노드의 자식 노드가 하나인 경우)
• 자식을 링크시켜준다.
![Page 50: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/50.jpg)
이진 트리
• 삭제 과정(지우는 노드의 자식 노드가 둘인 경우)
• 트리 안에서 자기 자신과 가장 가까운 수를
매치시킨다.
• 오른쪽 노드중 가장 큰 수나
• 왼쪽 노드중 가장 작은 수
![Page 51: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/51.jpg)
이진 트리따지고 보면 30은 다른 자리로 가고, 이 자리도 없어지는거나 마찬가지
이 노드에 대한 삭제 알고리즘도 이뤄져야 한다. 결국은 재귀적
![Page 52: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/52.jpg)
이진 트리
저장과 검색에 평균 Θ(log n)시간이 소요되지만,
최악의 경우 Θ(n)에 근접한 시간이 소요될수 있다.
> 35
![Page 53: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/53.jpg)
이진 트리
40
30
3520
10 25
??
40
30
35
20
10
25
?
?
![Page 54: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/54.jpg)
이진 트리
• 이진 트리 자체가
동적 데이터를 위해 기획된 것
• 어떤 데이터가 어떤 순서로
들어올지 아무도 모른다.
40
30
35
20
25
10
![Page 55: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/55.jpg)
레드 블랙 트리
![Page 56: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/56.jpg)
레드 블랙 트리1. 모든 노드는 빨간색or검은색 둘중 하나다.
2. 루트 노드는 검은 색이다.
3. 잎 노드는 검은 색이다.
4. 빨간 노드의 자식들은 모두 검은색이다.
하지만 검은색 노드의 자식이 빨간색일 필요는
없다.
……
……
등등의 많은 규칙들로 이루어져 있다??
![Page 57: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/57.jpg)
레드 블랙 트리
![Page 58: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/58.jpg)
레드 블랙 트리
이진 트리의 규칙균형 유지를 위한
새로운 규칙
![Page 59: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/59.jpg)
레드 블랙 트리
균형 유지를 위한
새로운 규칙
삽입 될 때마다 지들이 요리조리
자리를 바꿔서 균형이
잘 유지되는 방법이 없을까????
![Page 60: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/60.jpg)
레드 블랙 트리
균형 유지를 위한
새로운 규칙
해서 고안된
방법 중 하나가 색깔 개념을 도입하여
균형 유지를 하는
레드 블랙 트리
![Page 61: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/61.jpg)
레드 블랙 트리
균형 유지를 위한
새로운 규칙
1. 모든 노드는 빨간색or검은색 둘 중 하나다.
2. 루트 노드는 검은 색이다.
3. 잎 노드는 검은 색이다.
4. 빨간 노드의 자식들은 모두 검은색이다.
빨간 노드의 부모는 반드시 검은색이다.
5. 루트 노드에서의 모든 잎 노드 사이에
있는 검은색 노드의 수는 모두 동일하다.
![Page 62: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/62.jpg)
레드 블랙 트리4. 빨간 노드의 자식들은 모두 검은색이다.
빨간 노드의 부모는 반드시 검은색이다.
5. 루트 노드에서의 모든 잎 노드 사이에
있는 검은색 노드의 수는 모두 동일하다.
이 규칙이 적용되면
루트 노드부터 가장 먼 경로까지의 거리가,
가장 가까운 경로까지의 거리의
두 배 보다 항상 작다.
![Page 63: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/63.jpg)
레드 블랙 트리
• 무슨 말 인가하면…
Root
Leaf
Leaf
가장 가까운 경로
![Page 64: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/64.jpg)
레드 블랙 트리
• 무슨 말 인가하면…
Root
Leaf
Leaf
가장 먼 경로
![Page 65: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/65.jpg)
레드 블랙 트리
• 그래서 규칙이 지켜지면
– 개략적(roughly)으로
– 균형이 잡혀 있다(balanced)
는 사실을 보장된다고 말하는 것
![Page 66: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/66.jpg)
레드 블랙 트리
• 이론이 정립 됬으면
– 다음은 탐색, 삽입, 삭제를 알아보는 것
– 탐색은 색깔 개념이 필요 없다.
– 그냥 이진 트리 탐색처럼 찾으면 끝.
![Page 67: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/67.jpg)
레드 블랙 트리
• 회전의 개념
– 자식을 부모의 위치로 올림.
• 왼쪽자식을 부모 위치로 -> 우회전
• 오른쪽자식을 부모 위치로 -> 좌회전
8
5
3
9
6
8
5
3
96
![Page 68: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/68.jpg)
레드 블랙 트리
• 회전의 개념
– 자식을 부모의 위치로 올림.
8
5
3
9
6
8
5
3
96
8
5
3
96
![Page 69: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/69.jpg)
레드 블랙 트리
• 회전의 개념
– 자식을 부모의 위치로 올림.
8
5
3
9
6
8
5
3
9
6
8
5
3
96
![Page 70: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/70.jpg)
레드 블랙 트리
• 삽입의 개념
– 작업 1. 이진 트리와 같이 삽입(기본 레드)
– 작업 2. 레드 블랙 규칙을 맞춤
![Page 71: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/71.jpg)
레드 블랙 트리
• 삽입의 개념
1. 모든 노드는 빨간색or검은색 둘 중 하나다.
2. 루트 노드는 검은 색이다.
3. 잎 노드는 검은 색이다.
4. 빨간 노드의 자식들은 모두 검은색이다.
빨간 노드의 부모는 반드시 검은색이다.
5. 루트 노드에서의 모든 잎 노드 사이에
있는 검은색 노드의 수는 모두 동일하다.
![Page 72: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/72.jpg)
레드 블랙 트리
• 삽입의 개념
– 경우
• 삽입할 자리의 부모 노드가 검은색일 때
– 규칙 유지
• 삽입할 자리의 부모 노드가 빨간색일 때
– 규칙 위반
![Page 74: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/74.jpg)
레드 블랙 트리13
8 17
1 11 15 25
NIL 6 NILNIL
NIL NIL
NIL NIL 22 27
NIL NIL NIL NIL
![Page 75: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/75.jpg)
레드 블랙 트리
• 12를 추가13
8 17
1 11 15 25
NIL 6 NIL
NILNIL NIL
NIL NIL 22 27
NIL NIL NIL NIL
12
NIL
![Page 76: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/76.jpg)
레드 블랙 트리
• 삽입의 개념
– 경우
• 삽입할 자리의 부모 노드가 빨간색일 때
– 규칙 위반
– 또다시 3가지 경우 (부모노드가 할아버지 노드의 오른쪽 자식일때)
» 삼촌도 빨간색
» 삼촌이 검은색이며, 새로 삽입한 노드가 부모의 오른쪽
» 삼촌이 검은색이며, 새로 삽입한 노드가 부모의 왼쪽
![Page 77: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/77.jpg)
레드 블랙 트리
규칙 위반??
OK
부모 노드가
할아버지노드
의 오른쪽??
삼촌이
빨강??
삼촌이
빨강??
아니 위반
오른쪽 왼쪽
응 빨강
아니 검정
옆에꺼
방향반대로..삽입 노드
가 오른쪽?왼쪽
오른쪽
![Page 78: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/78.jpg)
레드 블랙 트리
• 삽입의 개념
– 경우• 삽입할 자리의 부모 노드가 빨간색일 때
– 규칙 위반
– 또다시 3가지 경우
»삼촌도 빨간색» 삼촌이 검은색이며, 새로 삽입한 노드가 부모의 오른쪽
» 삼촌이 검은색이며, 새로 삽입한 노드가 부모의 왼쪽
![Page 79: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/79.jpg)
레드 블랙 트리
• 30을 추가13
8 17
1 11 15 25
NIL 6 NILNIL
NIL NIL
NIL NIL 22 27
NIL NIL NIL 30
![Page 80: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/80.jpg)
레드 블랙 트리
• 30을 추가13
8 17
1 11 15 25
NIL 6 NILNIL
NIL NIL
NIL NIL 22 27
NIL NIL NIL 30
위반!
![Page 81: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/81.jpg)
레드 블랙 트리
• 삽입의 개념
– 또다시 3가지 경우
• 삼촌도 빨간색– 부모와 삼촌을 검정으로 칠하고, 할아버지를 빨강으로.
– 재귀
![Page 82: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/82.jpg)
레드 블랙 트리
• 30을 추가13
8 17
1 11 15 25
NIL 6 NILNIL
NIL NIL
NIL NIL 22 27
NIL NIL NIL 30
![Page 83: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/83.jpg)
레드 블랙 트리
• 30을 추가13
8 17
1 11 15 25
NIL 6 NILNIL
NIL NIL
NIL NIL 22 27
NIL NIL NIL 30
![Page 84: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/84.jpg)
레드 블랙 트리
• 30을 추가13
8 17
1 11 15 25
NIL 6 NILNIL
NIL NIL
NIL NIL 22 27
NIL NIL NIL 30
![Page 85: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/85.jpg)
레드 블랙 트리
• 30을 추가13
8 17
1 11 15 25
NIL 6 NILNIL
NIL NIL
NIL NIL 22 27
NIL NIL NIL 30
위반!
![Page 86: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/86.jpg)
레드 블랙 트리
• 30을 추가13
8 17
1 11 15 25
NIL 6 NILNIL
NIL NIL
NIL NIL 22 27
NIL NIL NIL 30
![Page 87: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/87.jpg)
레드 블랙 트리
• 삽입의 개념
– 경우
• 삽입할 자리의 부모 노드가 빨간색일 때
– 규칙 위반
– 또다시 3가지 경우
» 삼촌도 빨간색
» 삼촌이 검은색이며, 새로 삽입한 노드가 부모의 오른쪽
» 삼촌이 검은색이며, 새로 삽입한 노드가 부모의 왼쪽
![Page 88: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/88.jpg)
레드 블랙 트리
• 삽입의 개념
– 또다시 3가지 경우• 삼촌이 검은색이며, 새로 삽입한 노드가 부모의 오른쪽
– 부모 노드를 검은색, 할아버지를 빨강으로 칠한 후
– 할아버지 노드를 부모와 회전
![Page 89: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/89.jpg)
레드 블랙 트리13
8 17
1 11 15 25
NIL 6 NILNIL
NIL NIL
NIL NIL 22 27
NIL NIL NIL NIL
![Page 90: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/90.jpg)
레드 블랙 트리13
8 17
1 11 15 25
NIL 6 NILNIL
NIL
NIL NIL 22 27
NIL NIL NIL NIL
7을 삽입
7
위반!
![Page 91: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/91.jpg)
레드 블랙 트리13
8 17
1 11 15 25
NIL 6 NILNIL
NIL
NIL NIL 22 27
NIL NIL NIL NIL
7을 삽입
7
![Page 92: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/92.jpg)
레드 블랙 트리13
8 17
1 11 15 25
NIL 6 NILNIL
NIL
NIL NIL 22 27
NIL NIL NIL NIL
7을 삽입
7
![Page 93: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/93.jpg)
레드 블랙 트리13
8 17
1
11 15 25
NIL
6
NILNIL
NIL
NIL NIL 22 27
NIL NIL NIL NIL
7을 삽입
7
회전
NILNIL
![Page 94: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/94.jpg)
레드 블랙 트리13
8 17
1
11 15 25
NIL
6
NILNIL
NIL
NIL NIL 22 27
NIL NIL NIL NIL
7을 삽입
7
회전
NILNIL
![Page 95: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/95.jpg)
레드 블랙 트리
• 삽입의 개념
– 경우
• 삽입할 자리의 부모 노드가 빨간색일 때
– 규칙 위반
– 또다시 3가지 경우
» 삼촌도 빨간색
» 삼촌이 검은색이며, 새로 삽입한 노드가 부모의 오른쪽
» 삼촌이 검은색이며, 새로 삽입한 노드가 부모의 왼쪽
![Page 96: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/96.jpg)
레드 블랙 트리
• 삽입의 개념
– 또다시 3가지 경우• 삼촌이 검은색이며, 새로 삽입한 노드가 부모의 왼쪽
– 부모 노드를 오른쪽으로 회전하면,
– 경우 2 같은 상황이 됨.
![Page 97: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/97.jpg)
레드 블랙 트리13
8 17
1 11 15 25
NIL
6
NILNIL
NIL NIL 22 27
NIL NIL NIL NIL
5을 삽입
5
상황 2
NIL
![Page 98: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/98.jpg)
레드 블랙 트리
• 삽입에도 시간이 log2n만큼 걸린다.
![Page 99: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/99.jpg)
레드 블랙 트리
• 삭제는 숙제로…
![Page 100: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/100.jpg)
레드 블랙 트리
• 정리– 레드 블랙 트리는 색깔 규칙으로 유지된다.
– 규칙이 유지되면, 루트에서 제일 가까운 노드와 루트에서 제일 먼 노드의 길이가 2배이상 차이 나지못한다.
– 그래서 개략적으로 균형이 잡힌다.
![Page 101: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/101.jpg)
결론
• 순차 탐색
• 이진 탐색
• 이진 트리
• 레드 블랙 트리
![Page 102: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/102.jpg)
QnA
![Page 103: 알고리즘 스터디 탐색](https://reader034.fdocuments.net/reader034/viewer/2022050808/55965bd31a28ab00608b48ba/html5/thumbnails/103.jpg)
참고 자료
• 뇌를 자극하는 알고리즘 도서
• 레드블랙트리 위키• http://ko.wikipedia.org/wiki/%EB%A0%88%EB%93%9C-
%EB%B8%94%EB%9E%99_%ED%8A%B8%EB%A6%AC