34
이산수학 Discrete Mathematics 인천대학교 컴퓨터공학과 공학시인 이숙 이철호 교수 알고리즘(Algorithm) [email protected] [email protected] 01039576683 모바일컴퓨팅 연구실 07401

알고리즘(Algorithm)jullio.pe.kr/lecture/D_Math/inu2016_D_Math_ch04_R1.1.pdf · • 알고리즘(algorithm) : 컴퓨터프로그램으로특정한일을수행하는 명령어의유한한순서있는집합

  • Upload
    others

  • View
    14

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 알고리즘(Algorithm)jullio.pe.kr/lecture/D_Math/inu2016_D_Math_ch04_R1.1.pdf · • 알고리즘(algorithm) : 컴퓨터프로그램으로특정한일을수행하는 명령어의유한한순서있는집합

이산수학Discrete Mathematics

인천대학교 컴퓨터공학과

공학시인 이숙 이철호 교수

알고리즘(Algorithm)

[email protected]@inu.ac.kr010‐3957‐6683

모바일컴퓨팅연구실07‐401호

Page 2: 알고리즘(Algorithm)jullio.pe.kr/lecture/D_Math/inu2016_D_Math_ch04_R1.1.pdf · • 알고리즘(algorithm) : 컴퓨터프로그램으로특정한일을수행하는 명령어의유한한순서있는집합

상어가 바다의 절대 제왕이 된 이유출처 : 조영탁의 행복한 경영 이야기

상어는물고기중 유일하게 부레가 없다.

부레 없는 물고기는물속에서 생존이 불가능하다.

행동이 매우 불편하고, 조금만 바다 속에 머물러 있어도바닥으로 가라앉아 죽고 만다.

상어는태어난 순간부터 죽을 때까지끊임없이 몸을 움직여야 했다.

힘겨운 노력이 쌓여상어는바다의 절대제왕으로 거듭났다.- ‘유대인 생각공부(쑤린 지음)’에서

2

에릭호퍼는말합니다.“불완전한열등동물인인간이자연계에서동물이상의존재가될수있었던것은약점을이점으로바꾸는비범한천재적재능덕분이었다.”

주어진조건이아닌나의대응이결과를만듭니다. 

Page 3: 알고리즘(Algorithm)jullio.pe.kr/lecture/D_Math/inu2016_D_Math_ch04_R1.1.pdf · • 알고리즘(algorithm) : 컴퓨터프로그램으로특정한일을수행하는 명령어의유한한순서있는집합

지난 주에 …

3

어떤 회사에 근무하는 60명의 직원에게 해외 여행 경험을 물었다.

유럽 여행을 가본 사람은 35명,

동남아 여행을 가본 사람은 28명이었다.

해외여행을 한 번도 가본 적이 없는 사람은 5명이었다.

동남아 여행은 가봤지만 유럽 여행을 가본 적 없는사람은 몇 명일까?

동남아여행경험자

유럽여행경험자

5명

전체 60명유럽여행자 : A = 35 명동남아 여행자 : B = 28 명전체 : U = 60 명~(A U B) = 5 명A U B = U – 5 = 55 명A ∩ B = (A + B) – (A U B ) = 35 + 28 – 55 = 8~A = B - A ∩ B = 28 – 8 = 20

그러므로 여행 경험자 중 유럽을 가본적 없는 사람은 20 명(즉 동남아만 가본 사람)

AB

유럽만가본사람 : 27동남아만가본사람 : 20둘 다 가본 사람 : A ∩ B = 8

U

A ∩ B

Page 4: 알고리즘(Algorithm)jullio.pe.kr/lecture/D_Math/inu2016_D_Math_ch04_R1.1.pdf · • 알고리즘(algorithm) : 컴퓨터프로그램으로특정한일을수행하는 명령어의유한한순서있는집합

오늘의 강의 목표

• 알고리즘(Algorithm)

- 알고리즘

- 탐색(search)

- 정렬(sort)

- 함수의 증가

- 알고리즘 복잡도

4

Page 5: 알고리즘(Algorithm)jullio.pe.kr/lecture/D_Math/inu2016_D_Math_ch04_R1.1.pdf · • 알고리즘(algorithm) : 컴퓨터프로그램으로특정한일을수행하는 명령어의유한한순서있는집합

알고리즘이란?

• 알고리즘(algorithm) :

컴퓨터 프로그램으로 특정한 일을 수행하는

명령어의 유한한 순서 있는 집합

• 가장 효율적인 알고리즘을 찾는 것이 중요

• 수학 문제를 풀기 위해 정의나 정리들을 활용

• 컴퓨터 수행 가능한 효율적인 알고리즘을 사용

• 1830년 배비지(Babbage)와 러브레이스(Lovelace) 처음 주창

• 1973년 컴퓨터 과학자인 크누스(Knuth) 정립

컴퓨터 프로그래밍의 기술(The Art of Computer Programming)

5

Page 6: 알고리즘(Algorithm)jullio.pe.kr/lecture/D_Math/inu2016_D_Math_ch04_R1.1.pdf · • 알고리즘(algorithm) : 컴퓨터프로그램으로특정한일을수행하는 명령어의유한한순서있는집합

알고리즘

• 알고리즘 (algorithm)특정 문제를 해결하기 위해 기술한 일련의 명령문

• 프로그램 (program)알고리즘을 컴퓨터가 이해하고 실행할 수 있는

특정 프로그래밍 언어로 표현한 것

표현 : 순서도(flow chart), 유사 코드(pseudo code), 언어(language)

6

Page 7: 알고리즘(Algorithm)jullio.pe.kr/lecture/D_Math/inu2016_D_Math_ch04_R1.1.pdf · • 알고리즘(algorithm) : 컴퓨터프로그램으로특정한일을수행하는 명령어의유한한순서있는집합

알고리즘의 주요 특성

1) 입력(input) : 문제를 풀기 위한 입력

2) 출력(output) : 문제를 해결했을 때 답의 출력

3) 명확성(definiteness) : 각 단계가 실행된 후에는 결과가 확정(정의)

4) 정확성(correctness) : 주어진 문제를 정확하게 해결해야 함

5) 유한성(finiteness) : 유한 횟수의 명령이 수행된 후 출력을 만들어야

6) 효율성(effectiveness) : 정확하면서도 효율적으로 유한 시간내에 수행

7) 일반성(generality) : 요구되는 형태의 모든 문제에 적용

7

Page 8: 알고리즘(Algorithm)jullio.pe.kr/lecture/D_Math/inu2016_D_Math_ch04_R1.1.pdf · • 알고리즘(algorithm) : 컴퓨터프로그램으로특정한일을수행하는 명령어의유한한순서있는집합

자료구조와 알고리즘

8

80 70 90 30

score[]

자료구조 알고리즘

tmp←score[0]; for i ← 1 to n do

if score[i]>tmpthen tmp←score[i];

프로그램 = 자료구조 + 알고리즘

(예) 최대값 탐색 프로그램 = 배열+ 순차탐색

Page 9: 알고리즘(Algorithm)jullio.pe.kr/lecture/D_Math/inu2016_D_Math_ch04_R1.1.pdf · • 알고리즘(algorithm) : 컴퓨터프로그램으로특정한일을수행하는 명령어의유한한순서있는집합

탐색(search) 알고리즘

• 탐색(search)

주어진 파일 또는 원소들 중에서 어떤 특정한 원소를 찾는 것

• 선형(순차) 탐색(sequential search) :

원소들이 정렬되어 있지 않을 경우

원소들을 처음부터 비교하여 찾는 것

• 이진 탐색(binary search) :

원소들이 정렬되어 있을 경우 순차 탐색보다 빠름

배열 가운데의 원소 값과 찾으려는 값을 비교하여,

비교된 결과에 따라

왼쪽 원소의 배열 또는 오른쪽 원소의 배열 중에서 다시 찾기를 계속함

9

Page 10: 알고리즘(Algorithm)jullio.pe.kr/lecture/D_Math/inu2016_D_Math_ch04_R1.1.pdf · • 알고리즘(algorithm) : 컴퓨터프로그램으로특정한일을수행하는 명령어의유한한순서있는집합

선형 탐색(sequential search)

10

Page 11: 알고리즘(Algorithm)jullio.pe.kr/lecture/D_Math/inu2016_D_Math_ch04_R1.1.pdf · • 알고리즘(algorithm) : 컴퓨터프로그램으로특정한일을수행하는 명령어의유한한순서있는집합

이진 탐색(binary search)

11

Page 12: 알고리즘(Algorithm)jullio.pe.kr/lecture/D_Math/inu2016_D_Math_ch04_R1.1.pdf · • 알고리즘(algorithm) : 컴퓨터프로그램으로특정한일을수행하는 명령어의유한한순서있는집합

이진 탐색(binary search)• 예제 3-page 220

1, 2, 3, 5, 6, 7, 8, 10, 12,13,15,16,18,19,20,22

19를 찾음???

1. 두 개로 나눔

a) 1, 2, 3, 5, 6, 7, 8, 10

b) 12,13,15,16,18,19,20,22

2. 찾으려는 19와 a)의 가장 마지막 큰 항과 비교하면 19가 큼으로 b)를 둘로 쪼개서 탐색

c) 12,13,15,16

d) 18,19,20,22

12

3. c)의마지막항과 19를비교하여크므로 d)를둘로나누어탐색e) 18,19f) 20,224. e)의마지막항과 19를비교, 크지않으므로둘로나눔g) 18h) 195. 탐색하려는 19가 g)의 18보다크므로 h)항으로탐색6. 탐색처음포이트가끝포이트보다작지않으며,

19와같은지를비교하여,같으면탐색결과를찾았다고보고.

Page 13: 알고리즘(Algorithm)jullio.pe.kr/lecture/D_Math/inu2016_D_Math_ch04_R1.1.pdf · • 알고리즘(algorithm) : 컴퓨터프로그램으로특정한일을수행하는 명령어의유한한순서있는집합

분할 정복 알고리즘(divide and conquer algorithms)

그대로 해결할 수 없는 문제를 작은 문제로 분할하여,

문제를 해결하는 방법이나 알고리즘

알고리즘이 효율적인 이유

큰 문제를 작은 문제로 나누어서 해결할 수 있음

13

Page 14: 알고리즘(Algorithm)jullio.pe.kr/lecture/D_Math/inu2016_D_Math_ch04_R1.1.pdf · • 알고리즘(algorithm) : 컴퓨터프로그램으로특정한일을수행하는 명령어의유한한순서있는집합

정렬(sort) 알고리즘

임의로 나열되어 있는 데이터

주어진 항목에 따라 크기 순서대로

작은 순서부터(오름차순, ascending order)

또는 큰 순서부터(내림차순, descending order)

늘어놓는 것

• 정렬되어 있는 데이터들은 다음과 같은 작업을 수행할 때 응용

(1) 데이터를 탐색할 때

(2) 리스트(list)에 있는 다른 항목들을 비교할 때

14

Page 15: 알고리즘(Algorithm)jullio.pe.kr/lecture/D_Math/inu2016_D_Math_ch04_R1.1.pdf · • 알고리즘(algorithm) : 컴퓨터프로그램으로특정한일을수행하는 명령어의유한한순서있는집합

버블 정렬(bubble sort)

15

Page 16: 알고리즘(Algorithm)jullio.pe.kr/lecture/D_Math/inu2016_D_Math_ch04_R1.1.pdf · • 알고리즘(algorithm) : 컴퓨터프로그램으로특정한일을수행하는 명령어의유한한순서있는집합

삽입 정렬(insert sort)

• 예제 5 : 3, 2, 4, 1, 51) [3]과 앞의 원소 처음부터 비교 : 3, [2], 4, 1, 5 2, [3], 4, 1, 5

2) [4]와 앞의 원소 처음부터 비교 : 2, 3, [4], 1, 5 2, 3, [4], 1, 5

3) [1]과 앞의 원소 처음부터 비교 : 2, 3, 4, [1], 5 1, 2, 3, 4, [5]

4) [5]와 앞의 원소 처음부터 비교 : 1, 2, 3, 4, [5] 1, 2, 3, 4, 5

16

Page 17: 알고리즘(Algorithm)jullio.pe.kr/lecture/D_Math/inu2016_D_Math_ch04_R1.1.pdf · • 알고리즘(algorithm) : 컴퓨터프로그램으로특정한일을수행하는 명령어의유한한순서있는집합

욕심쟁이 알고리즘(greedy algorithm)• 최적해 문제

• 매 선택에서 지금 당장의 순간에 최적인 해를수행

전체적으로 최적해가 아닐 수 있음

17

Page 18: 알고리즘(Algorithm)jullio.pe.kr/lecture/D_Math/inu2016_D_Math_ch04_R1.1.pdf · • 알고리즘(algorithm) : 컴퓨터프로그램으로특정한일을수행하는 명령어의유한한순서있는집합

욕심쟁이 알고리즘(greedy algorithm)• 예제 6 거스름돈 문제

• 25센트, 10센트, 5센트, 1센트 동전으로 가장 적은 수의동전을 사용하여 67센트를 거슬러 주는 방법

1) 67 – 25 = 42센트 25센트 1개

2) 42 – 25 = 17센트 25센트 1개

3) 17 – 10 = 7센트 10센트 1개

4) 7 – 5 = 2센트 5센트 1개

5) 2 – 1 = 1센트 1센트 1개

6) 1 -1 = 0센트 1센트 1개

전체 해)

25센트 2개, 10센트 1개, 5센트 1개, 1센트 2개

18

Page 19: 알고리즘(Algorithm)jullio.pe.kr/lecture/D_Math/inu2016_D_Math_ch04_R1.1.pdf · • 알고리즘(algorithm) : 컴퓨터프로그램으로특정한일을수행하는 명령어의유한한순서있는집합

욕심쟁이 알고리즘(greedy algorithm)• 예제 6 거스름돈 문제

• 25센트, 10센트, (5센트:사용 안함), 1센트 동전으로 가장 적은수의 동전을 사용하여 30센트를 거슬러 주는 방법

1) 30 – 25 = 5센트 25센트 1개

2) 5 – 1 = 4센트 1센트 1개

3) 4 – 1 = 3센트 1센트 1개

4) 3 – 2 = 2센트 1센트 1개

5) 2 – 1 = 1센트 1센트 1개

6) 1 -1 = 0센트 1센트 1개

전체 해)

25센트 1개, 1센트 5개 전체 6개 사용

그러나 10센트 3개로 해결 가능

19

Page 20: 알고리즘(Algorithm)jullio.pe.kr/lecture/D_Math/inu2016_D_Math_ch04_R1.1.pdf · • 알고리즘(algorithm) : 컴퓨터프로그램으로특정한일을수행하는 명령어의유한한순서있는집합

정렬 알고리즘

• 퀵 정렬(quick sort)- 분할정복 방법을 통해 리스트를 정렬

- 리스트 가운데서 하나의 원소를 고름(피벗)

- 피벗 앞에는 피벗보다 값이 작은 모든 원소들이 오고,

피벗 뒤에는 피벗보다 값이 큰 모든 원소들이 오도록

피벗을 기준으로 리스트를 둘로 나눔(분할)

- 분할을 마친 뒤에 피벗은 더 이상 움직이지 않는다.

- 분할된 두 개의 작은 리스트에 대해

- 재귀(Recursion)적으로 이 과정을 반복

- 재귀는 리스트의 크기가 0이나 1이 될 때까지 반복

- 재귀 호출이 한번 진행될 때마다

최소한 하나의 원소는 최종적으로 위치가 정해짐.

20

Page 21: 알고리즘(Algorithm)jullio.pe.kr/lecture/D_Math/inu2016_D_Math_ch04_R1.1.pdf · • 알고리즘(algorithm) : 컴퓨터프로그램으로특정한일을수행하는 명령어의유한한순서있는집합

정렬 알고리즘

• 병합 정렬(merge sort)• 리스트의 길이가 0 또는 1이면 이미 정렬된 것

• 정렬되지 않은 리스트를 절반으로 잘라

비슷한 크기의 두 부분 리스트로 나눔

• 각 부분 리스트를 재귀적으로 합병 정렬

• 두 부분 리스트를 다시 하나의 정렬된 리스트로 합병

21

Page 22: 알고리즘(Algorithm)jullio.pe.kr/lecture/D_Math/inu2016_D_Math_ch04_R1.1.pdf · • 알고리즘(algorithm) : 컴퓨터프로그램으로특정한일을수행하는 명령어의유한한순서있는집합

정렬 알고리즘

• 힙 정렬(heap sort)1) n개의 노드에 대한 완전 이진 트리를 구성

루트 노드부터 부노드, 왼쪽 자노드,

오른쪽 자노드 순으로 구성

2) 최대 힙을 구성

최대 힙이란 부노드가 자노드보다 큰 트리를 말함

단말 노드를 자노드로 가진 부노드부터 구성

아래부터 루트까지 올라오며

순차적으로 만들어 감

3) 가장 큰 수(루트에 위치)를 가장 작은 수와 교환

4) 2)와 3)을 반복한다.

22

힙(heap) :최댓값및최솟값을찾아내는연산을빠르게하기위해고안된완전이진트리(Complete binary tree)를기본으로한자료구조(tree‐based structure)

Page 23: 알고리즘(Algorithm)jullio.pe.kr/lecture/D_Math/inu2016_D_Math_ch04_R1.1.pdf · • 알고리즘(algorithm) : 컴퓨터프로그램으로특정한일을수행하는 명령어의유한한순서있는집합

알고리즘의 복잡도

• 시간 복잡도(time complexity)• 알고리즘 수행 시간 분석 결과

• 공간 복잡도(space complexity)• 알고리즘의 메모리 사용량에 대한 분석 결과

23

Page 24: 알고리즘(Algorithm)jullio.pe.kr/lecture/D_Math/inu2016_D_Math_ch04_R1.1.pdf · • 알고리즘(algorithm) : 컴퓨터프로그램으로특정한일을수행하는 명령어의유한한순서있는집합

알고리즘 복잡도

O(1) : 상수(constant)O(log n) : 로그(logarithmic) O(n) : 1차(linear)O(n log n) : 선형 연산(linear-arithmetic)O(n2) : 2차(quadratic)O(n3) : 3차(cubic)O(2n) : 지수(exponential)O(n!) : factorial

24

Page 25: 알고리즘(Algorithm)jullio.pe.kr/lecture/D_Math/inu2016_D_Math_ch04_R1.1.pdf · • 알고리즘(algorithm) : 컴퓨터프로그램으로특정한일을수행하는 명령어의유한한순서있는집합

알고리즘 복잡도big-o 추정에 따른 함수들의 증가 그래프

25

N 값

함수의증가값

Page 26: 알고리즘(Algorithm)jullio.pe.kr/lecture/D_Math/inu2016_D_Math_ch04_R1.1.pdf · • 알고리즘(algorithm) : 컴퓨터프로그램으로특정한일을수행하는 명령어의유한한순서있는집합

차수 그래프

26

상한값 표시 하한값 표시 중간값 표시

Page 27: 알고리즘(Algorithm)jullio.pe.kr/lecture/D_Math/inu2016_D_Math_ch04_R1.1.pdf · • 알고리즘(algorithm) : 컴퓨터프로그램으로특정한일을수행하는 명령어의유한한순서있는집합

함수의 증가(복잡도)

• big-O 표기 : • 최악의 경우 복잡도(상한선 표기법)

• big-Omega• 최선의 복잡도(하한선 표기법)

• big-Theta• 평균 복잡도

27

Page 28: 알고리즘(Algorithm)jullio.pe.kr/lecture/D_Math/inu2016_D_Math_ch04_R1.1.pdf · • 알고리즘(algorithm) : 컴퓨터프로그램으로특정한일을수행하는 명령어의유한한순서있는집합

big-O 표기법

• 최악의 경우 복잡도(상한선 표기법)

임의의 함수에 대하여

"함수의 입력값(정의역의 원소)이 커짐에 따라

그 출력 값(그 원소의 상)이

얼마나 빠르게 커지는가"를 표현

28

Page 29: 알고리즘(Algorithm)jullio.pe.kr/lecture/D_Math/inu2016_D_Math_ch04_R1.1.pdf · • 알고리즘(algorithm) : 컴퓨터프로그램으로특정한일을수행하는 명령어의유한한순서있는집합

big-Omega 표기법

29

최선의복잡도(하한선표기법)

big-Theta 표기법평균복잡도

Page 30: 알고리즘(Algorithm)jullio.pe.kr/lecture/D_Math/inu2016_D_Math_ch04_R1.1.pdf · • 알고리즘(algorithm) : 컴퓨터프로그램으로특정한일을수행하는 명령어의유한한순서있는집합

big-O 표기법(상한 표기법)어떤 함수 g(n)이 O(n2)에

속한다는 말은 함수 g(n)이

임의의 N 값보다 큰값에 대하여

어떤 2차 함수 cn2 보다는

작은 값을 가지게 된다는 의미

• 그래프 상에서 아래에 위치한다는 의미

• 즉 그 함수 g(n)은 어떤 2차함수 cn2 보다는 궁극적으로좋다는 의미

30

Page 31: 알고리즘(Algorithm)jullio.pe.kr/lecture/D_Math/inu2016_D_Math_ch04_R1.1.pdf · • 알고리즘(algorithm) : 컴퓨터프로그램으로특정한일을수행하는 명령어의유한한순서있는집합

big-O 표기의 예(예제 1-page 234)

은 임을

보이라

• 풀이)• x >1 일때, x < x2이고 1 < x2 이다

• x > 1에서

• x > 2에서

31

Big O를 보이는데 단지 한 가지 해답이 있는 것이 아니다.

적당히 큰 k과 C를 선택하여 풀면 된다.

(C = 4, k=1)

(C = 3, k=2)

Page 32: 알고리즘(Algorithm)jullio.pe.kr/lecture/D_Math/inu2016_D_Math_ch04_R1.1.pdf · • 알고리즘(algorithm) : 컴퓨터프로그램으로특정한일을수행하는 명령어의유한한순서있는집합

big-Omega()(하한 표기법)

어떤함수 g(n)이 (n2)에속한다는말은

그함수는궁극에가서는

어떤임의의 N값보다큰값에대해서는

어떤 2차함수 cn2의값보다는

큰값을가지게된다는것을의미

• 그래프 상에서는 윗부분에위치

• 그 함수 g(n)은어떤 2차 함수 cn2 보다는

궁극적으로 나쁘다는의미

32

Page 33: 알고리즘(Algorithm)jullio.pe.kr/lecture/D_Math/inu2016_D_Math_ch04_R1.1.pdf · • 알고리즘(algorithm) : 컴퓨터프로그램으로특정한일을수행하는 명령어의유한한순서있는집합

big-Theta 표기법

함수 f(n)에 대해서

(f(n)) = O(f(n)) (f(n))의 관계가성립

즉, n N인모든정수 n에 대해서

c f(n) g(n) d f(n)이 성립하는

실수 c 0와 d 0,

그리고음이아닌정수 N이존재

33

Page 34: 알고리즘(Algorithm)jullio.pe.kr/lecture/D_Math/inu2016_D_Math_ch04_R1.1.pdf · • 알고리즘(algorithm) : 컴퓨터프로그램으로특정한일을수행하는 명령어의유한한순서있는집합

쉬어가는 시간• 또 하나의 천칭 문제???

1 g 단위로 자를 수 있는 40 g 짜리 분동이 있다.

이것을 잘라서 1 ~ 40 g까지 무게를 측정하려 한다. 40 g짜리 분동을

가장 적은 수의 토막으로 잘라 만들려면

어떻게 잘라야 할까?

34

이름,학번,답과 이유를 설명

1 g짜리 40개가 위와 같이 있다.어떻게 잘라야 할까?

1 g (40개)