(algorithm)jullio.pe.kr/lecture/2017/05inu2017_d_math_ch03.pdf이산수학 discrete mathematics...
TRANSCRIPT
이산수학Discrete Mathematics
인천대학교 컴퓨터공학과
공학시인 이숙 이철호 교수
알고리즘(Algorithm)
[email protected]@inu.ac.kr010‐3957‐6683
모바일컴퓨팅 연구실07‐401호
꿈의 중독자가 되라출처 : 조영탁의 행복한 경영 이야기
나는 여러분이‘꿈 중독자’가 되었으면 합니다.
꿈이 크고꿈이 선명하면남이 하지 말라고 해도스스로 열심히 노력하게 될 것입니다.
반대로 꿈이 없다면내가 지금 무엇을 해야 하는지알지 못합니다.
그래서 자기도 모르게시간을 낭비하게 됩니다.
그런 하루하루가 쌓이면시간이 갈수록엄청난 차이가 생기게 되는 것입니다.- 김우중 대우 창업회장, ‘김우중 어록’에서
2
전 세계를 누볐던 80대 노 기업가가,2017년 GYBM(김우중 사관학교) 20대 연수생과의 대화에서강조한 내용입니다.
젊은이뿐만 아니라이 시대를 살아가는모든 이에게들려주는 메시지라 생각합니다.
일단꿈부터,큰 꿈을 꾸는 것부터시작해야 합니다.
거기서새로운 인생이 시작됩니다.
지난 주에 …
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 명(즉 해외여행 경험이 있는 사람중 동남아만 가본 사람이 20명)
AB
유럽만 가본 사람 : 27동남아만 가본 사람 : 20둘 다 가본 사람 : A ∩ B = 8
U
A ∩ B
오늘의 강의 목표
• 알고리즘(Algorithm)
- 알고리즘
- 탐색(search)
- 정렬(sort)
- 함수의 증가
- 알고리즘 복잡도
4
알고리즘이란?
• 알고리즘(algorithm) :
컴퓨터 프로그램으로 특정한 일을 수행하는
명령어의 유한한 순서 있는 집합
• 가장 효율적인 알고리즘을 찾는 것이 중요
• 수학 문제를 풀기 위해 정의나 정리들을 활용
• 컴퓨터 수행 가능한 효율적인 알고리즘을 사용
• 1830년 배비지(Babbage)와 러브레이스(Lovelace) 처음 주창
• 1973년 컴퓨터 과학자인 크누스(Knuth)가 정립
컴퓨터 프로그래밍의 기술(The Art of Computer Programming)
5
알고리즘
• 알고리즘 (algorithm)특정 문제를 해결하기 위해 기술한 일련의 명령문
• 프로그램 (program)알고리즘을 컴퓨터가 이해하고 실행할 수 있는
특정 프로그래밍 언어로 표현한 것
표현 : 순서도(flow chart), 유사 코드(pseudo code), 언어(language)
6
알고리즘의 주요 특성
1) 입력(input) : 문제를 풀기 위한 입력
2) 출력(output) : 문제를 해결했을 때 답의 출력
3) 명확성(definiteness) : 각 단계가 실행된 후에는 결과가 확정(정의)
4) 정확성(correctness) : 주어진 문제를 정확하게 해결해야 함
5) 유한성(finiteness) : 유한 횟수의 명령이 수행된 후 출력을 만들어야
6) 효율성(effectiveness) : 정확하면서도 효율적으로 유한 시간내에 수행
7) 일반성(generality) : 요구되는 형태의 모든 문제에 적용
7
자료구조와 알고리즘
8
80 70 90 30
score[]
자료구조 알고리즘
tmp←score[0]; for i ← 1 to n do
if score[i]>tmpthen tmp←score[i];
…
프로그램 = 자료구조 + 알고리즘
(예) 최대값 탐색 프로그램 = 배열+ 순차탐색
탐색(search) 알고리즘
• 탐색(search)
주어진 파일 또는 원소들 중에서 어떤 특정한 원소를 찾는 것
• 선형(순차) 탐색(sequential search) :
원소들이 정렬되어 있지 않을 경우
원소들을 처음부터 비교하여 찾는 것
• 이진 탐색(binary search) :
원소들이 정렬되어 있을 경우 순차 탐색보다 빠름
배열 가운데의 원소 값과 찾으려는 값을 비교하여,
비교된 결과에 따라
왼쪽 원소의 배열 또는 오른쪽 원소의 배열 중에서 다시 찾기를 계속함
9
선형 탐색(sequential search)
10
이진 탐색(binary search)
11
이진 탐색(binary search)예제 3-page 2201, 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,19(f) 20,224) (e)의 마지막 항과 19를 비교, 크지 않으므로 둘로 나눔(g) 18(h) 195) 탐색하려는 19가 (g)의 18보다 크므로 (h)항으로 탐색6) 탐색 처음 포인트가 끝 포인트보다 작지 않으며,
19와 같은지를 비교하여, 같으면 탐색 결과를 찾았다고 보고함.
분할 정복 알고리즘(divide and conquer algorithms)
그대로 해결할 수 없는 문제를 작은 문제로 분할하여,
문제를 해결하는 방법이나 알고리즘
알고리즘이 효율적인 이유
큰 문제를 작은 문제로 나누어서 해결할 수 있음
13
정렬(sort) 알고리즘
임의로 나열되어 있는 데이터
주어진 항목에 따라 크기 순서대로
작은 순서부터(오름차순, ascending order)
또는 큰 순서부터(내림차순, descending order)
늘어놓는 것
• 정렬되어 있는 데이터들은 다음과 같은 작업을 수행할 때 응용
(1) 데이터를 탐색할 때
(2) 리스트(list)에 있는 다른 항목들을 비교할 때
14
버블 정렬(bubble sort)
15
예제 4 : 3, 2, 4, 1, 5 – page 222
삽입 정렬(insert sort)
• 예제 5 : 3, 2, 4, 1, 5 – page 2231) [2]과 앞의 원소 처음부터 비교 : 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
욕심쟁이 알고리즘(greedy algorithm)• 최적해 문제
• 매 선택에서 지금 당장의 순간에 최적인 해를 수행
전체적으로 최적해가 아닐 수 있음
17
욕심쟁이 알고리즘(greedy algorithm)• 예제 6 거스름돈 문제 : 224 page• 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
욕심쟁이 알고리즘(greedy algorithm)• 예제 6 거스름돈 문제-1 : 224 page
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
정렬 알고리즘
• 퀵 정렬(quick sort)- 분할정복 방법을 통해 리스트를 정렬
- 리스트 가운데서 하나의 원소를 고름(피벗)
- 피벗 앞에는 피벗보다 값이 작은 모든 원소들이 오고,
피벗 뒤에는 피벗보다 값이 큰 모든 원소들이 오도록
피벗을 기준으로 리스트를 둘로 나눔(분할)
- 분할을 마친 뒤에 피벗은 더 이상 움직이지 않는다.
- 분할된 두 개의 작은 리스트에 대해
- 재귀(Recursion)적으로 이 과정을 반복
- 재귀는 리스트의 크기가 0이나 1이 될 때까지 반복
- 재귀 호출이 한번 진행될 때마다
최소한 하나의 원소는 최종적으로 위치가 정해짐.
20
정렬 알고리즘퀵 정렬(quick sort)
21
정렬 알고리즘
• 병합 정렬(merge sort)• 리스트의 길이가 0 또는 1이면 이미 정렬된 것
• 정렬되지 않은 리스트를 절반으로 잘라
비슷한 크기의 두 부분 리스트로 나눔
• 각 부분 리스트를 재귀적으로 합병 정렬
• 두 부분 리스트를 다시 하나의 정렬된 리스트로 합병
22
1. 분할
정렬 알고리즘병합 정렬(merge sort)
23
2. 병합
3. Sorting 과정
트리(Tree)
24
이진 트리 포화 이진 트리
완전 이진 트리 편향 이진 트리
힙(Heap)
• 완전 이진 트리에 있는 노드 중에서
• 키값이 가장 큰 노드나 키 값이 가장 작은 노드를 찾기 위해서 만든 자료 구조
• 최대 힙• 부모 노드의 키 값이 자식 노드의 키 값보다 항상
크거나 같은 크기의 관계
• 최소 힙• 부모 노드의 키 값이 자식 노드의 키 값보다 항상
작거나 같은 크기의 관계
25
힙(Heap)
26
정렬 알고리즘힙 정렬(heap sort)
1) n개의 노드에 대한 완전 이진 트리를 구성
루트 노드부터 부노드, 왼쪽 자노드,
오른쪽 자노드 순으로 구성
2) 최대 힙을 구성
최대 힙이란 부노드가 자노드보다 큰 트리를 말함
단말 노드를 자노드로 가진 부노드부터 구성
아래부터 루트까지 올라오며
순차적으로 만들어 감
3) 가장 큰 수(루트에 위치)를 가장 작은 수와 교환
4) 2)와 3)을 반복한다.
27
힙(heap) :최댓값 및 최솟값을 찾아내는 연산을 빠르게 하기 위해 고안된완전이진트리(Complete binary tree)를 기본으로 한 자료구조(tree‐based structure)
정렬 알고리즘힙 정렬(heap sort)
28
정렬 알고리즘힙 정렬(heap sort)
29
정렬 알고리즘힙 정렬(heap sort)
30
정렬 알고리즘힙 정렬(heap sort)
31
정렬 알고리즘힙 정렬(heap sort)
32
정렬 알고리즘힙 정렬(heap sort)
33
정렬 알고리즘힙 정렬(heap sort)
34
정렬 알고리즘힙 정렬(heap sort)
35
정렬 알고리즘힙 정렬(heap sort)
36
알고리즘의 복잡도
• 시간 복잡도(time complexity)• 알고리즘 수행 시간 분석 결과
• 공간 복잡도(space complexity)• 알고리즘의 메모리 사용량에 대한 분석 결과
37
알고리즘 복잡도
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
38
알고리즘 복잡도big-o 추정에 따른 함수들의 증가 그래프
39
N 값
함수의 증가 값
차수 그래프
40
상한값 표시 하한값 표시 중간값 표시
함수의 증가(복잡도)
• big-O 표기 : • 최악의 경우 복잡도(상한선 표기법)
• big-Omega• 최선의 복잡도(하한선 표기법)
• big-Theta• 평균 복잡도
41
big-O 표기법
• 최악의 경우 복잡도(상한선 표기법)
임의의 함수에 대하여
"함수의 입력값(정의역의 원소)이 커짐에 따라
그 출력 값(그 원소의 상)이
얼마나 빠르게 커지는가"를 표현
42
big-Omega 표기법
43
최선의 복잡도(하한선 표기법)
big-Theta 표기법평균 복잡도
big-O 표기법(상한 표기법)어떤 함수 g(n)이 O(n2)에
속한다는 말은 함수 g(n)이
임의의 N 값보다 큰값에 대하여
어떤 2차 함수 cn2 보다는
작은 값을 가지게 된다는 의미
• 그래프 상에서 아래에 위치한다는 의미
• 즉 그 함수 g(n)은 어떤 2차함수 cn2 보다는 궁극적으로좋다는 의미
44
big-O 표기의 예(예제 1-page 234)
은 임을
보이라
• 풀이)• x >1 일때, x < x2이고 1 < x2 이다
• x > 1에서
• x > 2에서
45
Big O를 보이는데 단지 한 가지 해답이 있는 것이 아니다.
적당히 큰 k과 C를 선택하여 풀면 된다.
(C = 4, k=1)
(C = 3, k=2)
big-Omega()(하한 표기법)
어떤함수 g(n)이 (n2)에속한다는말은
그함수는궁극에가서는
어떤임의의 N값보다큰값에대해서는
어떤 2차함수 cn2의값보다는
큰값을가지게된다는것을의미
• 그래프 상에서는 윗부분에위치
• 그 함수 g(n)은어떤 2차 함수 cn2 보다는
궁극적으로 나쁘다는의미
46
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이존재
47
생각하는 시간• 또 하나의 천칭 문제???
1 g 단위로 자를 수 있는 40 g 짜리 분동이 있다.
이것을 잘라서 1 ~ 40 g까지 무게를 측정하려 한다. 40 g짜리 분동을
가장 적은 수의 토막으로 잘라 만들려면
어떻게 잘라야 할까?
48
이름,학번,답과 이유를 설명(수학적 모델링)
1 g짜리 40개가 위와 같이 있다.어떻게 잘라야 할까?
1 g (40개)