96
알알알알 알알 2014.6.19. 15:15 알알 알알알 1

알고리즘 개론_06.19.pptx

  • Upload
    vonga

  • View
    239

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 알고리즘 개론_06.19.pptx

1

알고리즘 개론2014.6.19.15:15 시작장준영

Page 2: 알고리즘 개론_06.19.pptx

2

상 / 중 / 하• 상–나는 알고리즘을 매우 잘 알고 , 좀 더 어려운 난이도의 문제들을 보고 싶다 .

• 중–어느정도 알고리즘을 구현해본 적이 있다 .

• 하–알고리즘의 A 조차 모른다 .

Page 3: 알고리즘 개론_06.19.pptx

3

다룰 내용

Page 4: 알고리즘 개론_06.19.pptx

4

이 발표의 목적• 알고리즘 수업에 도움이 된다 .

• 다양한 레벨의 알고리즘을 경험– 필수적으로 알아야 하는 것– 약간 난이도가 있는 문제들– 매우 어려운 문제들 ( 수업에서 일부를 다룸 )– 알고리즘 대회

Page 5: 알고리즘 개론_06.19.pptx

5

알고리즘이 뭔가요 ?

Page 6: 알고리즘 개론_06.19.pptx

6

알고리즘• 어떠한 문제를 해결하기 위한 여러 동작들의 유한한 모임

– (from 위키백과 )

• 문제 해결 절차를 체계적으로 기술한 것– (from 문병로 교수님 ppt – 이하 강의자료 )

Page 7: 알고리즘 개론_06.19.pptx

7

알고리즘의 필요성알고리즘을 왜 공부해야 하는가 ?

Page 8: 알고리즘 개론_06.19.pptx

8

알고리즘의 필요성 ?

• 특정한 문제를 위한 알고리즘의 습득• 체계적으로 생각하는 훈련• 지적 추상화의 레벨 상승

– Intellectual abstraction– 연구나 개발에 있어 정신적 여유를 유지하기 위해 매우 중요한

요소

• (from 강의자료 )

Page 9: 알고리즘 개론_06.19.pptx

9

알고리즘의 필요성 !

• (1) 바보는 되지 말자 .

–> 아주 기본적인 알고리즘은 필수 !

Page 10: 알고리즘 개론_06.19.pptx

10

알고리즘의 필요성 !

• Big Integer–자료구조 과제 1–큰 두 수의 덧셈 , 뺄셈 , 곱셈을 만든다 .

Page 11: 알고리즘 개론_06.19.pptx

11

알고리즘의 필요성 !

• 곱셈을 덧셈으로 구현한다면 ?–끝나지 않는다 .

• 123918762 * 1927311 =123918762 + 123918762 + 123918762 + …

Page 12: 알고리즘 개론_06.19.pptx

12

알고리즘의 필요성 !

• (2) 알고리즘을 알면 할 수 있는 것들이 있다 .– SNS 를 통한 분석– 동접자가 100 만이 넘는 온라인게임 관리– 등등 많은 양의 데이터를 관리하는 경우

Page 13: 알고리즘 개론_06.19.pptx

13

점근적 복잡도 ( 시간복잡도 )알고리즘의 속도

Page 14: 알고리즘 개론_06.19.pptx

14

점근적 복잡도• 흔히 말하는• O(n), O(n^2), O(log n) 등등

Page 15: 알고리즘 개론_06.19.pptx

15

점근적 복잡도• 이 알고리즘이 얼마나 빠른거죠 ?

Page 16: 알고리즘 개론_06.19.pptx

16

점근적 복잡도• 이 알고리즘이 얼마나 빠른거죠 ?

–> 빠르다의 정의는 ?

Page 17: 알고리즘 개론_06.19.pptx

17

점근적 복잡도• 10 개의 숫자를 정렬하세요 .• 100 개의 숫자를 정렬하세요 .• 1000000 개의 숫자를 정렬하세요 .• n 개의 숫자를 정렬하세요 .

Page 18: 알고리즘 개론_06.19.pptx

18

점근적 복잡도

• 문제 크기 n 에 대해 어떤 함수에 비례하는 시간이 걸리는지 결정 !

Page 19: 알고리즘 개론_06.19.pptx

19

점근적 복잡도

(from 강의자료 )

Page 20: 알고리즘 개론_06.19.pptx

20

점근적 복잡도

(from 강의자료 )

Page 21: 알고리즘 개론_06.19.pptx

21

점근적 복잡도

• 몇 배 차이는 중요하지 않다 !– ( 같은 점근적 복잡도를 가지는 경우 몇 십 배 이상

차이 나지 않는다 .)

Page 22: 알고리즘 개론_06.19.pptx

22

점근적 복잡도

• 가장 큰 것 이외엔 중요하지 않다 !– n 이 큰 경우만 점근적 복잡도가 의미가 있다 .–수행시간 = n^3 + 3n^2 + 2n + 4• O(n^3)

Page 23: 알고리즘 개론_06.19.pptx

23

점근적 복잡도• g(n) 에 비례하는 함수를 나타내기 위한 기호– O(g(n)), Θ(g(n), Ω(g(n)), o(g(n)) 등–대략 g(n) 보다 작거나 같다 , g(n) 과 같다

등등으로 해석 가능 .–편의를 위해 O 만 사용 .

Page 24: 알고리즘 개론_06.19.pptx

24

점근적 복잡도

• O(g(n)) 에서 , g(n) 이 1 억 ~10 억이다 ?–초 단위의 시간이 걸릴 것을 예상할 수 있다 .

Page 25: 알고리즘 개론_06.19.pptx

25

점근적 복잡도 ( 실제 수행 시간 )

• Big Integer 곱셈을 덧셈으로 구현–>O(dn) (n 은 숫자 , d 는 n 의 자릿수 )n <= 10^10010^90 년 이상이 걸리지 않을까 ?

Page 26: 알고리즘 개론_06.19.pptx

26

점근적 복잡도 ( 실제 수행 시간 )

• Big Integer 곱셈을 의도한 방법으로 구현–>O(n^2) (n 은 자릿수 )n <= 1000.0…01 초쯤 걸린다 .

Page 27: 알고리즘 개론_06.19.pptx

27

점근적 복잡도• n 을 뭐로 잡느냐에 따라 함수도 달라진다 .

• g(n) 이 아니라 g(n,m), g(a,b,c,d) 등등일 수도 있다 .

Page 28: 알고리즘 개론_06.19.pptx

28

점근적 복잡도• 구하는 방법–점화식을 구한다 .– g(n) = g(n-1) + 1– g(n) = g(n-1) + n– g(n) = g(n/2) + 1

Page 29: 알고리즘 개론_06.19.pptx

29

점근적 복잡도g(n) = g(n-1) + 1

= g(n-2) + 1 + 1 = g(n-3) + 1 + 1 + 1 … = g(0) + 1 + 1 + … + 1 = n

Page 30: 알고리즘 개론_06.19.pptx

30

점근적 복잡도g(n) = g(n-1) + n

= g(n-2) + (n-1) + n … = g(0) + 1 + 2 + … + n = ½ n(n+1) = O(n^2)

Page 31: 알고리즘 개론_06.19.pptx

31

점근적 복잡도g(n) = g(n-1) + n

= g(n-2) + (n-1) + n … = g(0) + 1 + 2 + … + n = 0.5 * n^2 + 0.5 * n

Page 32: 알고리즘 개론_06.19.pptx

32

점근적 복잡도g(n) = g(n/2) + 1

= g(n/4) + 1 + 1 = g(n/8) + 1 + 1 + 1 … ( 대략 log n 번 하면 ) = g(1) + 1 + 1 + … + 1 = log n

Page 33: 알고리즘 개론_06.19.pptx

33

점근적 복잡도

• O(g(n)) 에서 , g(n) 이 1 억 ~10 억이다 ?–초 단위의 시간이 걸릴 것을 예상할 수 있다 .

Page 34: 알고리즘 개론_06.19.pptx

34

정렬 (SORTING)기본적인 알고리즘 예시

Page 35: 알고리즘 개론_06.19.pptx

35

정렬• 문제– n 개의 숫자를 오름차순으로 배열한다 .

Page 36: 알고리즘 개론_06.19.pptx

36

거품 정렬 (bubble sort)

Page 37: 알고리즘 개론_06.19.pptx

37

거품 정렬 (bubble sort)

Page 38: 알고리즘 개론_06.19.pptx

38

거품 정렬 (bubble sort)

for (int i = n - 1; i > 0; i++)for (int j = 0; j < i; j++)

if ( list[ j ] > list[ j+1 ] )swap( list[ j ], list[ j+1 ] );

(n-1) + (n-2) + … + 1 = n(n-1)/2 = 0.5n^2-0.5n// O(n^2)

Page 39: 알고리즘 개론_06.19.pptx

39

정렬• 비슷한 정렬–삽입정렬 , 선택정렬이 있고 모두 O(n^2)

–이 중에선 삽입정렬이 제일 좋다 .• 거의 다 정렬되어 있는 경우 빠르다 .

Page 40: 알고리즘 개론_06.19.pptx

40

32 3 65 73 8 11 20 29 48 15

32 3 65 73 8 11 20 29 48 15

정렬할 배열이 주어짐

배열을 반반으로 나눈다

각각 독립적으로 정렬한다

3 8 32 65 73 11 15 20 29 48

병합한다 ( 정렬완료 )

3 8 11 15 20 29 32 48 65 73

1

2 3

4

Mergesort (from 강의자료 )

Page 41: 알고리즘 개론_06.19.pptx

41

합병정렬 (mergesort)

• 크게 두 파트로 나누어져 있다 .–반으로 나누어 각각을 정렬한다 .–정렬된 두 리스트를 합친다 .

Page 42: 알고리즘 개론_06.19.pptx

42

3 8 32 65 73 11 15 20 29 48

i j

t

8 32 65 73 11 15 20 29 48

3

i j

t

31 65 73 11 15 20 29 48

3 8

i j

t

p q r Merge 의 작동 예(from 강의자료 )

Page 43: 알고리즘 개론_06.19.pptx

43

32 65 73 15 20 29 48

3 8 11

i j

t

32 65 73 20 29 48

3 8 11 15

i j

t

32 65 73 29 48

3 8 11 15 20

i j

t

Page 44: 알고리즘 개론_06.19.pptx

44

32 65 73 48

3 8 11 15 20 29

i j

t

65 73 48

3 8 11 15 20 29 32

i j

t

65 73

3 8 11 15 20 29 32 48

i j

t

Page 45: 알고리즘 개론_06.19.pptx

45

3 8 11 15 20 29 32 48 65 73

i j

t

Page 46: 알고리즘 개론_06.19.pptx

46

합병정렬 (mergesort)

• 수행 시간을 g(n) 이라고 하면–반으로 나누어 각각을 정렬한다 .• 2 * g(n/2)

–정렬된 두 리스트를 합친다 .• O(n)

Page 47: 알고리즘 개론_06.19.pptx

47

합병정렬 (mergesort)• g(n) = 2*g(n / 2) + O(n)– 대충 계산해보면g(n) = 2*g(n / 2) + n = 4*g(n / 4) + n + n … = n log (n)– O(n log n)

Page 48: 알고리즘 개론_06.19.pptx

48

합병정렬 (mergesort)

• 마스터 정리를 사용하면 바로 알 수 있다 .–수업 시간에 배웁니다 .

• 하지만 직관적으로 답을 알아내는 것도 좋다 .

Page 49: 알고리즘 개론_06.19.pptx

49

DYNAMIC PROGRAMMING( 동적 계획법 )

약간 어려운 알고리즘 예시

Page 50: 알고리즘 개론_06.19.pptx

50

Dynamic Programming

• 큰 문제를 풀기 위해 먼저 작은 문제를 푼다 .• 재귀적 해법 -> 반대로 한다면 ?

Page 51: 알고리즘 개론_06.19.pptx

51

피보나치• 1, 1, 2, 3, 5, 8, 13, 21, 34, …• f(n) = f(n-1) + f(n-2)

Page 52: 알고리즘 개론_06.19.pptx

52

피보나치int f (int n){

if(n == 0 || n == 1) return 1;return f (n-1) + f (n-2);

}

// 끝나지 않는다 ??

Page 53: 알고리즘 개론_06.19.pptx

53

피보나치f(10) = f(9) + f(8)

= f(8) + f(7) + f(7) + f(6)= f(7) + f(6) + f(6) + f(5) + f(6) + f(5)

+ f(5) + f(4)…

Page 54: 알고리즘 개론_06.19.pptx

54

피보나치• f(0)=1, f(1)=1 이다 .• f(2) = f(1) + f(0) = 2• f(3) = f(2) + f(1) = 3• …

Page 55: 알고리즘 개론_06.19.pptx

55

피보나치• 직전 두 개의 값 둘을 기억하고 , 다음 값을

구한다 .• O(n)

Page 56: 알고리즘 개론_06.19.pptx

56

최단경로 찾기S

E

Page 57: 알고리즘 개론_06.19.pptx

57

최단경로 찾기1 1 1 1 1 11 2 3 1111111

Page 58: 알고리즘 개론_06.19.pptx

58

최단경로 찾기1 1 1 1 1 11 2 3 11 3 6 11 4 10 10 10 111 10 20 311 1 1 11 31 621 2 3 14 621 3 6 20 26 88

Page 59: 알고리즘 개론_06.19.pptx

59

최단경로 찾기• f(x, y) = f(x-1, y) + f(x, y-1)

Page 60: 알고리즘 개론_06.19.pptx

60

최단경로 찾기int f (int x, int y){

if(x == 0 || y == 0) return 1;return f (x - 1, y) + f (x, y - 1);

}

Page 61: 알고리즘 개론_06.19.pptx

61

더 어려운 알고리즘들

Page 62: 알고리즘 개론_06.19.pptx

62

• 여기까진 공통으로 알아두면 좋다 .

Page 63: 알고리즘 개론_06.19.pptx

63

더 어려운 문제들• 수업 , 연구실에서 연구

P=NP현재까지 안 풀린 문제를 연구

• 알고리즘 대회–풀린 문제만 사용

Page 64: 알고리즘 개론_06.19.pptx

64

더 어려운 문제들• 수업 , 연구실에서 연구

P=NP현재까지 안 풀린 문제를 연구

• 알고리즘 대회–풀린 문제만 사용

Page 65: 알고리즘 개론_06.19.pptx

65

NP-COMPLETE연구분야

Page 66: 알고리즘 개론_06.19.pptx

66

문제의 종류• 풀 수 없다–정지문제 (halting problem)

• 풀 수 있다– (a) sorting, 최단거리– (b) TSP, 3-sat 등등

Page 67: 알고리즘 개론_06.19.pptx

67

문제의 종류• 풀 수 있다의 (b) 는 ( 아직까지는 ) 현실적인

시간에 풀 수 없다 .O(2^n), O(n!), O(n^n) 등등…

• 그 중에 NP-complete 라는 이론이 있다 .

Page 68: 알고리즘 개론_06.19.pptx

68

NP-Complete

• NP-Complete 에 해당하는 문제들이 많이 있다 .–이들 중 하나만 다항시간 안에 계산된다면 , 다른

모든 것들도 풀린다 .

Page 69: 알고리즘 개론_06.19.pptx

69

NP-Complete

• 모든 문제를 Yes, No 로 바꾸어 해석한다 .

• NP-Complete 는– NP 이고– NP-Hard 인 모든 문제를 말한다 .

Page 70: 알고리즘 개론_06.19.pptx

70

NP-Complete

• P–다항시간 안에 해를 구할 수 있다 .

• NP– Yes 가 나오는 해를 제공하면 , 이것이 Yes 라는

것을 다항시간 안에 확인할 수 있다 .– No 의 경우는 모름 .

Page 71: 알고리즘 개론_06.19.pptx

71

NP-Complete

• NP-Hard–모든 NP 문제를 L 로 다항시간 안에 변환할 수

있으면 , L 은 NP-Hard 이다 .–즉 , L 의 난이도는 NP 의 가장 어려운 문제

이상이다 .

Page 72: 알고리즘 개론_06.19.pptx

72

NP-Complete( 예시 )

• 최단거리는 어떤 모양이어도 다항시간 안에 풀리지만

• 최장거리 구하기 (Longest Path Problem)은 NP-Complete 이다 .

Page 73: 알고리즘 개론_06.19.pptx

73

NP-Complete( 예시 )

• Traveling Salesman Problem–모든 도시를 돌고 처음으로 돌아오는 최단경로 ?

Page 74: 알고리즘 개론_06.19.pptx

74

P=NP?

• 백만불의 상금이 걸려있는 문제 .

NP P=NP

(a) (b)

P

Page 75: 알고리즘 개론_06.19.pptx

75

비유 (from 강의자료 )

1. 나는 답을 구할 수가 없습니다 . 아마 나는 멍청한 모양입니다 .

상사가 아주 어려운 문제를 해결하라고 지시했다

Page 76: 알고리즘 개론_06.19.pptx

76

2. 나는 답을 구할 수가 없습니다 . 왜냐하면 이 문제는 답이 없어요 .

Page 77: 알고리즘 개론_06.19.pptx

77

3. 나는 답을 구할 수가 없습니다 . 그렇지만 저렇게 수많은 천재들도 이 문제를 해결할 수 없습니다 .

NP-Complete 이론의 상황을 비유적으로 보여줌

Page 78: 알고리즘 개론_06.19.pptx

78

근사 알고리즘• 완전한 해는 못 구해도 , 최적해와 가까운 해는 다항식

안에 구할 수 있는 경우가 있다 .(Heuristic)

• Traveling Salesman Problem– 다항식 시간에 최적해의 k 배 이내의 해를 구할 수

있는 경우가 있음

Page 79: 알고리즘 개론_06.19.pptx

79

근사 알고리즘• NP-Hard 문제임이 증명되면 Heuristic 을 생각하자 !

Page 80: 알고리즘 개론_06.19.pptx

80

알고리즘 대회

Page 81: 알고리즘 개론_06.19.pptx

81

알고리즘 대회• 많은 대회들이 있다 .– google code jam– IPSC– ACM-ICPC–등등

Page 82: 알고리즘 개론_06.19.pptx

82

Page 83: 알고리즘 개론_06.19.pptx

83

Page 84: 알고리즘 개론_06.19.pptx

84

문제 예시• N 개의 수로 이루어진 배열 A 가 있을 때 ,

인접한 두 수의 교환만으로 up and down sequence 를 만들려 한다 . 최소의 교환 횟수를 구하시오 .

• (Google Code Jam 2014 Round 2)

Page 85: 알고리즘 개론_06.19.pptx

85

문제 예시• Up and down sequence– A1 < A2 < ... < Am > Am+1 > ... > AN

– 1, 4, 10, 14, 9, 7, 3, 2

Page 86: 알고리즘 개론_06.19.pptx

86

문제 예시 ( 풀이 )

6 5 1 4 2 3

Page 87: 알고리즘 개론_06.19.pptx

87

문제 예시 ( 풀이 )

• (1) 최솟값을 찾는다 .

6 5 1 4 2 3

Page 88: 알고리즘 개론_06.19.pptx

88

문제 예시 ( 풀이 )

• (2) 왼쪽 끝이 가까운지 오른쪽 끝이 가까운지 찾는다 .

6 5 1 4 2 3

2 3

Page 89: 알고리즘 개론_06.19.pptx

89

문제 예시 ( 풀이 )

• (3) 더 가까운 쪽으로 옮긴다 .6 5 1 4 2 3

6 1 5 4 2 3

1 6 5 4 2 3

Page 90: 알고리즘 개론_06.19.pptx

90

문제 예시 ( 풀이 )

• (4) 나머지 숫자에 대해 이 과정을 반복한다 .

1 6 5 4 2 3

Page 91: 알고리즘 개론_06.19.pptx

91

문제 예시 ( 풀이 )• (1) 최솟값을 찾는다 : O(n)• (2) 왼쪽 끝이 가까운지 오른쪽 끝이 가까운지 찾는다 : O(n)• (3) 더 가까운 쪽으로 옮긴다 : O(n)• (4) 나머지 숫자에 대해 이 과정을 반복한다 : O(g(n-1))

• O(g(n)) = O(g(n-1)) + O(n) + O(n) = O(g(n-1)) + O(n)• O(g(n)) = O(n^2)

Page 92: 알고리즘 개론_06.19.pptx

92

문제 예시 ( 풀이 )

• n <= 1000 이므로 ok.

Page 93: 알고리즘 개론_06.19.pptx

93

문제 예시 ( 풀이 )

• 시간이 남는다면 왜 이게 맞는지 생각해보는 것도 좋다 .

• 하지만 대회는 시간이 생명 !

Page 94: 알고리즘 개론_06.19.pptx

94

문제 예시 ( 풀이 )

• Up and down sequence 에서는 최솟값이 맨 왼쪽 또는 오른쪽에 있어야 한다 .

• 인접한 두 값만 바꿀 수 있고 , 맨 왼쪽 또는 오른쪽에 있는 값은 더 이상 변하지 않는다 .

Page 95: 알고리즘 개론_06.19.pptx

95

기타• Greedy 알고리즘–현재 상황에서 최선의 전략을 찾는다 .• 전체적으로는 최선이 아닐 수 있다 .

Page 96: 알고리즘 개론_06.19.pptx

96

End

Q & A