알고리즘 스터디 탐색

103
탐색 DevRookie 프로모션(권승진)

Upload: sj-k

Post on 03-Jul-2015

1.080 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 알고리즘 스터디   탐색

탐색

DevRookie

프로모션(권승진)

Page 2: 알고리즘 스터디   탐색

목차

• 탐색의 의미

• 순차 탐색

• 이진 탐색

• 이진 탐색 트리

• 레드 블랙 트리

Page 3: 알고리즘 스터디   탐색

탐색의 의미

• 탐색– 드러나지 않은 사물을 찾아내기 위하여 살피어 찾음

– 컴퓨터에서는 ‘데이터’를 찾아내는 과정

Page 4: 알고리즘 스터디   탐색

탐색의 의미

• 탐색– 드러나지 않은 사물을 찾아내기 위하여 살피어 찾음

– 컴퓨터에서는 ‘데이터’를 찾아내는 과정

Page 5: 알고리즘 스터디   탐색

탐색의 의미

• 종류– 비정렬 데이터에서의 검색

– 정렬 “

– 탐색을 위해 자료구조 자체를 새로 구성

Page 6: 알고리즘 스터디   탐색

순차 탐색

Page 7: 알고리즘 스터디   탐색

순차 탐색

[0] [1] [2] [3] [4] [5] ……

배열

여기 있니???

없구나. 다음

Page 8: 알고리즘 스터디   탐색

순차 탐색

[0] [1] [2] [3] [4] [5] ……

배열

그럼 여기 있니???

없구나. 다음

Page 9: 알고리즘 스터디   탐색

순차 탐색

[0] [1] [2] [3] [4] [5] ……

배열

그럼 여기 있니???

여기있네!!!!?

Page 10: 알고리즘 스터디   탐색

순차 탐색

• 처음부터 끝까지 모든 요소를 검사

• 정렬되지 않는 데이터 집합에서

사용 가능한 유일한 탐색 방법

Page 11: 알고리즘 스터디   탐색

순차 탐색

• 코드로 치면 이런 식..

Page 12: 알고리즘 스터디   탐색

순차 탐색

• 최악의 경우

– 수행시간은 O(n)

[0] [1] [2] [3] [4] [n]……

아~이런! 제일

마지막에 있었구나!

Page 13: 알고리즘 스터디   탐색

순차 탐색

• 순차도 조금 최적화를 해보고 싶다!

• 자주 찾는 물건은 시작점에 가까운 곳으로!

Page 14: 알고리즘 스터디   탐색

순차 탐색

• 자기 구성 순차 탐색

– 전진 이동법

– 전위법

– 빈도 계수법

Page 15: 알고리즘 스터디   탐색

순차 탐색

• 자기 구성 순차 탐색

– 전진 이동법(Move to front method)

• hit 했을 때 제일 앞으로 옮김.

• 예) 40 검색 시

10 20 50 40 15 20013

찾았다 40! 다음에 빨리 찾도록

맨 앞으로 옮겨놔야지!!!!

Page 16: 알고리즘 스터디   탐색

순차 탐색

• 자기 구성 순차 탐색

– 전진 이동법(Move to front method)

10 2040 15 2001350

한번 탐색된 항목이 또 다시 검색될 가능성이 높은 데이터 집합에만 사용

Page 17: 알고리즘 스터디   탐색

순차 탐색

• 자기 구성 순차 탐색

– 전진 이동법(Move to front method)

• 한번 탐색된 항목이 또 다시 검색될 가능성이 높은

데이터 집합에만 사용

• 배열에서는 엄청 비효율적일 듯…

Page 18: 알고리즘 스터디   탐색

순차 탐색

• 자기 구성 순차 탐색

– 전위법(Transpose method)

• hit 했을 때 한 칸 앞자리로 옮김.

• 예) 40 검색 시

10 20 50 40 15 20013

찾았다 40!

40의 우선순위를 올려야겠어!!

Page 19: 알고리즘 스터디   탐색

순차 탐색

• 자기 구성 순차 탐색

– 전위법(Transpose method)

• hit 했을 때 한 칸 앞자리로 옮김.

• 예) 40 검색 시

10 20 15 200135040

Page 20: 알고리즘 스터디   탐색

순차 탐색

• 자기 구성 순차 탐색

– 전위법(Transpose method)

• 탐색이 여러 번 진행되면?

Page 21: 알고리즘 스터디   탐색

순차 탐색

• 자기 구성 순차 탐색

– 계수법

• 탐색횟수를 별도의 공간에 저장해두고, 그것을 토

대로 재구성 하는 알고리즘.

• 엄청 민주적이지만, 비용이…

Page 22: 알고리즘 스터디   탐색

순차 탐색

• 정리

– 처음부터 끝까지!

– 정렬되지 않는 집합에서 탐색은 이 방법밖에!!

– 자기 구성 순차 탐색

Page 23: 알고리즘 스터디   탐색

순차 탐색

• 한가지 더 짚고 넘어갈 것??

Page 24: 알고리즘 스터디   탐색

이진 탐색

Page 25: 알고리즘 스터디   탐색

집합이 정렬되어 있다면

순차보다 좋은 방법이 있다!!!

Page 26: 알고리즘 스터디   탐색

이진 탐색

• 정렬된 데이터라면 ‘범위’라는

개념으로 줄여나갈 수 있다.

– 예) 15을 찾는다면,

10 13 15 20 40 50 200

배열 정중앙을 보니 20이네!!

정렬된 데이터니까 0~정중앙 사이에 있겠네!!?

Page 27: 알고리즘 스터디   탐색

이진 탐색

• 정렬된 데이터라면 ‘범위’라는

개념으로 줄여나갈 수 있다.

– 예) 15을 찾는다면,

10 13 15 20 40 50 200

Page 28: 알고리즘 스터디   탐색

이진 탐색

• ‘범위’의 개념을 이용한 이진 탐색

1. 중앙 요소를 고른다.

10 13 15 20 40 50 200

예) 15을 찾는다면,

배열크기 : 7

절반 : 3

Page 29: 알고리즘 스터디   탐색

이진 탐색

• ‘범위’의 개념을 이용한 이진 탐색

2. 중앙의 값와 Target값을 비교

10 13 15 20 40 50 200

예) 15을 찾는다면,

15 < 20

Page 30: 알고리즘 스터디   탐색

이진 탐색

• ‘범위’의 개념을 이용한 이진 탐색3. 값을 찾을 때까지 절반이 된 범위에 1~3적용

10 13 15 20 40 50 200

배열크기 : 3

절반 : 1

Page 31: 알고리즘 스터디   탐색

이진 탐색

• ‘범위’의 개념을 이용한 이진 탐색

3. 값을 찾을 때까지 절반이 된 범위에 1~3적용

예) 15을 찾는다면,

10 13 15 20 40 50 200

15 > 13

Page 32: 알고리즘 스터디   탐색

이진 탐색

• ‘범위’의 개념을 이용한 이진 탐색

3. 값을 찾을 때까지 절반이 된 범위에 1~3적용

예) 15을 찾는다면,

10 13 15 20 40 50 200

15 == 15

Page 33: 알고리즘 스터디   탐색

이진 탐색

• 한번 비교할 때마다 범위가 절반씩 주네!!!

배열의 크기가 N일 때 탐색시마다 범위는???

N/2 N/4 N/16첫 탐색 시 두 번째 탐색 시 세번째 탐색 시

Page 34: 알고리즘 스터디   탐색

이진 탐색

• 한번 비교할 때마다 범위가 절반씩 주네!!!

배열의 크기가 N이고, 탐색횟수를 x라 했을때

x번째에 데이터 범위 =

Page 35: 알고리즘 스터디   탐색

이진 탐색

• 한번 비교할 때마다 범위가 절반씩 주네!!!

최악의 경우는

= 1일 경우

Page 36: 알고리즘 스터디   탐색

이진 탐색

Page 37: 알고리즘 스터디   탐색

이진 탐색

• 즉, 최악의 시간은 log2n

• 예를 들자면,• 100만개의 데이터에서 20회

• 1,000만 개의 데이터에서 23회

Page 38: 알고리즘 스터디   탐색

이진 탐색

• 정렬 할 수만 있다면…

– 순차와 비교도 안 되는 압도적인 속도

Page 39: 알고리즘 스터디   탐색

이진 탐색

• 코드로 보면..

Page 40: 알고리즘 스터디   탐색

이진 탐색

• 코드로 보면..

링크드 리스트의 정 중앙에 어떻게 접근해..

Page 41: 알고리즘 스터디   탐색

이진 탐색

• 동적으로 크기가 변경되는 자료구조여야 한다면..

Page 42: 알고리즘 스터디   탐색

이진 탐색 트리

Page 43: 알고리즘 스터디   탐색

이진 트리

• 종류– 비정렬 데이터에서의 검색

– 정렬 “

–탐색을 위해 자료구조

자체를 새로 구성

Page 44: 알고리즘 스터디   탐색

이진 트리

• 개념

–데이터를 한번 가공(자료구조

셋팅) 후 삽입, 삭제, 탐색이

용이하도록 만듬

Page 45: 알고리즘 스터디   탐색

이진 트리

• 특성– 루트가 있고, 2개의 자식을 가짐

– 어떤 노드의 키 값은 왼쪽 자식보다 크고, 오른쪽 자식보다 작다.

– 키 중복 불가

Page 46: 알고리즘 스터디   탐색

이진 트리

• 특성

– 35를 탐색한다?

음 30보다 크군 그럼 오른쪽으로

< 35

> 35

음 40보다 작군 그럼 왼쪽으로

Page 47: 알고리즘 스터디   탐색

이진 트리

• 삽입 과정

Page 48: 알고리즘 스터디   탐색

이진 트리

• 삭제 과정 (지우는 노드가 리프 노드인 경우)

Page 49: 알고리즘 스터디   탐색

이진 트리

• 삭제 과정(지우는 노드의 자식 노드가 하나인 경우)

• 자식을 링크시켜준다.

Page 50: 알고리즘 스터디   탐색

이진 트리

• 삭제 과정(지우는 노드의 자식 노드가 둘인 경우)

• 트리 안에서 자기 자신과 가장 가까운 수를

매치시킨다.

• 오른쪽 노드중 가장 큰 수나

• 왼쪽 노드중 가장 작은 수

Page 51: 알고리즘 스터디   탐색

이진 트리따지고 보면 30은 다른 자리로 가고, 이 자리도 없어지는거나 마찬가지

이 노드에 대한 삭제 알고리즘도 이뤄져야 한다. 결국은 재귀적

Page 52: 알고리즘 스터디   탐색

이진 트리

저장과 검색에 평균 Θ(log n)시간이 소요되지만,

최악의 경우 Θ(n)에 근접한 시간이 소요될수 있다.

> 35

Page 53: 알고리즘 스터디   탐색

이진 트리

40

30

3520

10 25

??

40

30

35

20

10

25

?

?

Page 54: 알고리즘 스터디   탐색

이진 트리

• 이진 트리 자체가

동적 데이터를 위해 기획된 것

• 어떤 데이터가 어떤 순서로

들어올지 아무도 모른다.

40

30

35

20

25

10

Page 55: 알고리즘 스터디   탐색

레드 블랙 트리

Page 56: 알고리즘 스터디   탐색

레드 블랙 트리1. 모든 노드는 빨간색or검은색 둘중 하나다.

2. 루트 노드는 검은 색이다.

3. 잎 노드는 검은 색이다.

4. 빨간 노드의 자식들은 모두 검은색이다.

하지만 검은색 노드의 자식이 빨간색일 필요는

없다.

……

……

등등의 많은 규칙들로 이루어져 있다??

Page 57: 알고리즘 스터디   탐색

레드 블랙 트리

Page 58: 알고리즘 스터디   탐색

레드 블랙 트리

이진 트리의 규칙균형 유지를 위한

새로운 규칙

Page 59: 알고리즘 스터디   탐색

레드 블랙 트리

균형 유지를 위한

새로운 규칙

삽입 될 때마다 지들이 요리조리

자리를 바꿔서 균형이

잘 유지되는 방법이 없을까????

Page 60: 알고리즘 스터디   탐색

레드 블랙 트리

균형 유지를 위한

새로운 규칙

해서 고안된

방법 중 하나가 색깔 개념을 도입하여

균형 유지를 하는

레드 블랙 트리

Page 61: 알고리즘 스터디   탐색

레드 블랙 트리

균형 유지를 위한

새로운 규칙

1. 모든 노드는 빨간색or검은색 둘 중 하나다.

2. 루트 노드는 검은 색이다.

3. 잎 노드는 검은 색이다.

4. 빨간 노드의 자식들은 모두 검은색이다.

빨간 노드의 부모는 반드시 검은색이다.

5. 루트 노드에서의 모든 잎 노드 사이에

있는 검은색 노드의 수는 모두 동일하다.

Page 62: 알고리즘 스터디   탐색

레드 블랙 트리4. 빨간 노드의 자식들은 모두 검은색이다.

빨간 노드의 부모는 반드시 검은색이다.

5. 루트 노드에서의 모든 잎 노드 사이에

있는 검은색 노드의 수는 모두 동일하다.

이 규칙이 적용되면

루트 노드부터 가장 먼 경로까지의 거리가,

가장 가까운 경로까지의 거리의

두 배 보다 항상 작다.

Page 63: 알고리즘 스터디   탐색

레드 블랙 트리

• 무슨 말 인가하면…

Root

Leaf

Leaf

가장 가까운 경로

Page 64: 알고리즘 스터디   탐색

레드 블랙 트리

• 무슨 말 인가하면…

Root

Leaf

Leaf

가장 먼 경로

Page 65: 알고리즘 스터디   탐색

레드 블랙 트리

• 그래서 규칙이 지켜지면

– 개략적(roughly)으로

– 균형이 잡혀 있다(balanced)

는 사실을 보장된다고 말하는 것

Page 66: 알고리즘 스터디   탐색

레드 블랙 트리

• 이론이 정립 됬으면

– 다음은 탐색, 삽입, 삭제를 알아보는 것

– 탐색은 색깔 개념이 필요 없다.

– 그냥 이진 트리 탐색처럼 찾으면 끝.

Page 67: 알고리즘 스터디   탐색

레드 블랙 트리

• 회전의 개념

– 자식을 부모의 위치로 올림.

• 왼쪽자식을 부모 위치로 -> 우회전

• 오른쪽자식을 부모 위치로 -> 좌회전

8

5

3

9

6

8

5

3

96

Page 68: 알고리즘 스터디   탐색

레드 블랙 트리

• 회전의 개념

– 자식을 부모의 위치로 올림.

8

5

3

9

6

8

5

3

96

8

5

3

96

Page 69: 알고리즘 스터디   탐색

레드 블랙 트리

• 회전의 개념

– 자식을 부모의 위치로 올림.

8

5

3

9

6

8

5

3

9

6

8

5

3

96

Page 70: 알고리즘 스터디   탐색

레드 블랙 트리

• 삽입의 개념

– 작업 1. 이진 트리와 같이 삽입(기본 레드)

– 작업 2. 레드 블랙 규칙을 맞춤

Page 71: 알고리즘 스터디   탐색

레드 블랙 트리

• 삽입의 개념

1. 모든 노드는 빨간색or검은색 둘 중 하나다.

2. 루트 노드는 검은 색이다.

3. 잎 노드는 검은 색이다.

4. 빨간 노드의 자식들은 모두 검은색이다.

빨간 노드의 부모는 반드시 검은색이다.

5. 루트 노드에서의 모든 잎 노드 사이에

있는 검은색 노드의 수는 모두 동일하다.

Page 72: 알고리즘 스터디   탐색

레드 블랙 트리

• 삽입의 개념

– 경우

• 삽입할 자리의 부모 노드가 검은색일 때

– 규칙 유지

• 삽입할 자리의 부모 노드가 빨간색일 때

– 규칙 위반

Page 74: 알고리즘 스터디   탐색

레드 블랙 트리13

8 17

1 11 15 25

NIL 6 NILNIL

NIL NIL

NIL NIL 22 27

NIL NIL NIL NIL

Page 75: 알고리즘 스터디   탐색

레드 블랙 트리

• 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: 알고리즘 스터디   탐색

레드 블랙 트리

• 삽입의 개념

– 경우

• 삽입할 자리의 부모 노드가 빨간색일 때

– 규칙 위반

– 또다시 3가지 경우 (부모노드가 할아버지 노드의 오른쪽 자식일때)

» 삼촌도 빨간색

» 삼촌이 검은색이며, 새로 삽입한 노드가 부모의 오른쪽

» 삼촌이 검은색이며, 새로 삽입한 노드가 부모의 왼쪽

Page 77: 알고리즘 스터디   탐색

레드 블랙 트리

규칙 위반??

OK

부모 노드가

할아버지노드

의 오른쪽??

삼촌이

빨강??

삼촌이

빨강??

아니 위반

오른쪽 왼쪽

응 빨강

아니 검정

옆에꺼

방향반대로..삽입 노드

가 오른쪽?왼쪽

오른쪽

Page 78: 알고리즘 스터디   탐색

레드 블랙 트리

• 삽입의 개념

– 경우• 삽입할 자리의 부모 노드가 빨간색일 때

– 규칙 위반

– 또다시 3가지 경우

»삼촌도 빨간색» 삼촌이 검은색이며, 새로 삽입한 노드가 부모의 오른쪽

» 삼촌이 검은색이며, 새로 삽입한 노드가 부모의 왼쪽

Page 79: 알고리즘 스터디   탐색

레드 블랙 트리

• 30을 추가13

8 17

1 11 15 25

NIL 6 NILNIL

NIL NIL

NIL NIL 22 27

NIL NIL NIL 30

Page 80: 알고리즘 스터디   탐색

레드 블랙 트리

• 30을 추가13

8 17

1 11 15 25

NIL 6 NILNIL

NIL NIL

NIL NIL 22 27

NIL NIL NIL 30

위반!

Page 81: 알고리즘 스터디   탐색

레드 블랙 트리

• 삽입의 개념

– 또다시 3가지 경우

• 삼촌도 빨간색– 부모와 삼촌을 검정으로 칠하고, 할아버지를 빨강으로.

– 재귀

Page 82: 알고리즘 스터디   탐색

레드 블랙 트리

• 30을 추가13

8 17

1 11 15 25

NIL 6 NILNIL

NIL NIL

NIL NIL 22 27

NIL NIL NIL 30

Page 83: 알고리즘 스터디   탐색

레드 블랙 트리

• 30을 추가13

8 17

1 11 15 25

NIL 6 NILNIL

NIL NIL

NIL NIL 22 27

NIL NIL NIL 30

Page 84: 알고리즘 스터디   탐색

레드 블랙 트리

• 30을 추가13

8 17

1 11 15 25

NIL 6 NILNIL

NIL NIL

NIL NIL 22 27

NIL NIL NIL 30

Page 85: 알고리즘 스터디   탐색

레드 블랙 트리

• 30을 추가13

8 17

1 11 15 25

NIL 6 NILNIL

NIL NIL

NIL NIL 22 27

NIL NIL NIL 30

위반!

Page 86: 알고리즘 스터디   탐색

레드 블랙 트리

• 30을 추가13

8 17

1 11 15 25

NIL 6 NILNIL

NIL NIL

NIL NIL 22 27

NIL NIL NIL 30

Page 87: 알고리즘 스터디   탐색

레드 블랙 트리

• 삽입의 개념

– 경우

• 삽입할 자리의 부모 노드가 빨간색일 때

– 규칙 위반

– 또다시 3가지 경우

» 삼촌도 빨간색

» 삼촌이 검은색이며, 새로 삽입한 노드가 부모의 오른쪽

» 삼촌이 검은색이며, 새로 삽입한 노드가 부모의 왼쪽

Page 88: 알고리즘 스터디   탐색

레드 블랙 트리

• 삽입의 개념

– 또다시 3가지 경우• 삼촌이 검은색이며, 새로 삽입한 노드가 부모의 오른쪽

– 부모 노드를 검은색, 할아버지를 빨강으로 칠한 후

– 할아버지 노드를 부모와 회전

Page 89: 알고리즘 스터디   탐색

레드 블랙 트리13

8 17

1 11 15 25

NIL 6 NILNIL

NIL NIL

NIL NIL 22 27

NIL NIL NIL NIL

Page 90: 알고리즘 스터디   탐색

레드 블랙 트리13

8 17

1 11 15 25

NIL 6 NILNIL

NIL

NIL NIL 22 27

NIL NIL NIL NIL

7을 삽입

7

위반!

Page 91: 알고리즘 스터디   탐색

레드 블랙 트리13

8 17

1 11 15 25

NIL 6 NILNIL

NIL

NIL NIL 22 27

NIL NIL NIL NIL

7을 삽입

7

Page 92: 알고리즘 스터디   탐색

레드 블랙 트리13

8 17

1 11 15 25

NIL 6 NILNIL

NIL

NIL NIL 22 27

NIL NIL NIL NIL

7을 삽입

7

Page 93: 알고리즘 스터디   탐색

레드 블랙 트리13

8 17

1

11 15 25

NIL

6

NILNIL

NIL

NIL NIL 22 27

NIL NIL NIL NIL

7을 삽입

7

회전

NILNIL

Page 94: 알고리즘 스터디   탐색

레드 블랙 트리13

8 17

1

11 15 25

NIL

6

NILNIL

NIL

NIL NIL 22 27

NIL NIL NIL NIL

7을 삽입

7

회전

NILNIL

Page 95: 알고리즘 스터디   탐색

레드 블랙 트리

• 삽입의 개념

– 경우

• 삽입할 자리의 부모 노드가 빨간색일 때

– 규칙 위반

– 또다시 3가지 경우

» 삼촌도 빨간색

» 삼촌이 검은색이며, 새로 삽입한 노드가 부모의 오른쪽

» 삼촌이 검은색이며, 새로 삽입한 노드가 부모의 왼쪽

Page 96: 알고리즘 스터디   탐색

레드 블랙 트리

• 삽입의 개념

– 또다시 3가지 경우• 삼촌이 검은색이며, 새로 삽입한 노드가 부모의 왼쪽

– 부모 노드를 오른쪽으로 회전하면,

– 경우 2 같은 상황이 됨.

Page 97: 알고리즘 스터디   탐색

레드 블랙 트리13

8 17

1 11 15 25

NIL

6

NILNIL

NIL NIL 22 27

NIL NIL NIL NIL

5을 삽입

5

상황 2

NIL

Page 98: 알고리즘 스터디   탐색

레드 블랙 트리

• 삽입에도 시간이 log2n만큼 걸린다.

Page 99: 알고리즘 스터디   탐색

레드 블랙 트리

• 삭제는 숙제로…

Page 100: 알고리즘 스터디   탐색

레드 블랙 트리

• 정리– 레드 블랙 트리는 색깔 규칙으로 유지된다.

– 규칙이 유지되면, 루트에서 제일 가까운 노드와 루트에서 제일 먼 노드의 길이가 2배이상 차이 나지못한다.

– 그래서 개략적으로 균형이 잡힌다.

Page 101: 알고리즘 스터디   탐색

결론

• 순차 탐색

• 이진 탐색

• 이진 트리

• 레드 블랙 트리

Page 102: 알고리즘 스터디   탐색

QnA

Page 103: 알고리즘 스터디   탐색

참고 자료

• 뇌를 자극하는 알고리즘 도서

• 레드블랙트리 위키• http://ko.wikipedia.org/wiki/%EB%A0%88%EB%93%9C-

%EB%B8%94%EB%9E%99_%ED%8A%B8%EB%A6%AC