문제 분해와 알고리즘
1
2
여행 계획, 어떻게 효율적으로 세울 수 있을까?
일상을 떠나 새로운 곳으로의 여행을 통해 휴식과 즐거움을 찾는 사람이 많다. 그러나 여행을 떠나려는 결심을 하고 계획을 세우기 시작하면서 어디로 여행을 갈 것인지, 일정을 어떻게 계획해야 할 것인지, 교통편을 어떻게 이용하는 것이 좋을지, 숙박과 관광지 코스는 어떻게 정해야 할지 등 해결해야 할 크고 작은 문제들을 만난다.
이와 같이 해결해야 할 요소가 다양할 때는 문제를 분해하여 각각의 요소로 나누어 해결하는 것이 바람직하다.
즐거운 여행에 필요한 요소는 어떻게 나누어 계획을 수립할 수 있을까?
3
3
3
3
3
3
3
문제 분해와 모델링
문제의 이해
4
복잡한 문제를 해결 가능한
작은 문제로 분해하여 모델링
할 수 있다.
5
01. 문제 분해와 모델링
6
6
6
6
6
6
6
문제 분해와 모델링
복잡한 문제는 추상화를 통해 단순화 가능
① 작은 문제로 분해
7
01. 문제 분해와 모델링
② 모델링을 통해 단순화
8
01. 문제 분해와 모델링
문제를 모델링하여 해결하기
9
주어진 문제 상황을 분석하여 현재 상태와 목표 상태로 정의해 보자.
주어진 문제 상황을 분해하여 작은 문제로 정의할 수 있는 방법을 적어 보자.
10
폭식으로 인해 체중이 불어난 상태
10kg 체중 감량에 성공한 상태
10kg 체중 감량을 하기 위해 고려할 요인들이 복합적으로 존재하여 복잡한 상황
체중 감량에 꼭 필요한 요소를 의식주 관점에서 분해하여 생각하기
분해한 문제를 표, 그림 등을 활용하여 모델링해 보자.
11
폭식으로 인해 체중이 불어난 상태
운동
규칙적인 생활 및 건강한 수면
수면
정렬 알고리즘
정렬 알고리즘의 의미
12
• 정렬의 개념을 이해하고, 다
양한 정렬 알고리즘에 대해
설명할 수 있다.
• 다양한 정렬 알고리즘의 효율
을 비교·분석할 수 있다.
13
02. 정렬 알고리즘
정렬 알고리즘의 종류
① 버블 정렬
① 맨 왼쪽부터 시작하여 배열의 첫 번째 값부터 마지막 값까지 순차적으로 비교한다.
② 두 인접한 값을 비교하여 만약 순서가 맞지 않는다면 두 데이터의 위치를 교환한다.
③ 모든 인접한 요소를 비교하면 가장 큰 값이 배열의 맨 오른쪽에 이동하게 되며, 가장 큰 값부터 정렬이 이루어진다.
④ ①~③의 과정을 반복하면서 주어진 데이터를 정렬한다.
14
02. 정렬 알고리즘
15
02. 정렬 알고리즘
② 선택 정렬
① 정렬되지 않은 맨 왼쪽부터 시작해서 오른쪽으로 이동하면서 배열의 각 위치를 순차적으로 선택한다.
② 현재 위치부터 오른쪽으로 이동하면서 값을 비교하고 가장 작은 값(최솟값)을 찾는다.
③ 찾은 최솟값을 현재 위치의 값과 교환하게 되며 가장 작은 값부터 정렬이 이루어진다.
④ ①~③의 과정을 반복하면서 주어진 데이터를 정렬한다.
16
02. 정렬 알고리즘
17
02. 정렬 알고리즘
③ 삽입 정렬
① 정렬되지 않은 맨 왼쪽부터 시작해서 오른쪽으로 이동하면서 정렬되지 않은 값(현재 값)을 삽입할 위치를 찾는다.
② 정렬된 값 중 큰 값부터 작은 값 순서대로 하나씩 현재 값과 비교한다.
③ 현재 값보다 작거나 같은 값이 나오면 비교한 값 오른쪽에 현재 값을 삽입한다.
④ 정렬된 모든 값을 비교했다면 맨 앞에 현재 값을 삽입한다.
⑤ ①~④의 과정을 반복하면서 주어진 데이터를 정렬한다.
18
02. 정렬 알고리즘
19
02. 정렬 알고리즘
④ 퀵 정렬
① 정렬할 데이터 중 하나를 피벗으로 설정한다.
② 데이터를 피벗과 비교하여 작은 데이터는 피벗의 왼쪽, 큰 데이터는 피벗의 오른쪽에 배치하여 피벗을 중심으로 작은 데이터 그룹과 큰 데이터 그룹으로 분할한다.
③ 분할된 데이터 그룹에서 다시 피벗을 설정하고, 피벗을 기준으로 데이터를 분할한다.
④ ①~③과정을 반복하면서 주어진 데이터를 정렬한다.
20
02. 정렬 알고리즘
21
02. 정렬 알고리즘
정렬 알고리즘의 비교
① 정렬 알고리즘의 종류별 특징
22
02. 정렬 알고리즘
병합 정렬 비교 기반 정렬 알고리즘이며, 분할 정복 알고리즘의 하나
힙 정렬 최대 힙 트리나 최소 힙 트리를 구성해 정렬을 하는 방법
② 정렬 알고리즘의 효율성 비교
■ 버블 정렬 알고리즘을 사용하여 정렬하기
23
02. 정렬 알고리즘
■ 선택 정렬 알고리즘을 사용하여 정렬하기
24
02. 정렬 알고리즘
■ 삽입 정렬 알고리즘을 사용하여 정렬하기
25
02. 정렬 알고리즘
■ 퀵 정렬 알고리즘을 사용하여 정렬하기
26
02. 정렬 알고리즘
27
02. 정렬 알고리즘
여러 가지 방법으로 정렬하기
28
교내 정보 올림피아드에 참여할 학생을 선발하기 위해 A학급 학생들을 정렬하려고 한다.
정렬 알고리즘 중 하나를 선정하고 정렬 과정을 작성해 보자.
29
정보 시험 점수
버블 정렬
98
71
98
91
97
100
39
98
98
91
97
100
71
39
98
98
97
100
91
71
39
98
98
100
97
91
71
98
100
98
97
91
71
100
98
98
97
91
71
39
39
39
A학급에서 교내 정보 올림피아드에 출전할 학급 대표 학생 3명을 선발하려고 한다.
어떤 학생들을 선발할 것이며 그 이유는 무엇인지 적어 보자.
30
하윤
정보 성적이 가장 뛰어난 학생이기 때문이다.
민준
남은 사람 중 정보 및 수학, 국어 시험 점수가 높기 때문이다.
민서
남은 사람 중 정보 및 수학, 국어 시험 점수가 높기 때문이다.
탐색 알고리즘
탐색 알고리즘의 의미
31
• 탐색의 개념과 다양한 탐색
알고리즘에 대해 설명할 수
있다.
• 다양한 탐색 알고리즘의 효율
을 비교·분석할 수 있다.
탐색 알고리즘의 종류
① 순차 탐색
① 배열되어 있는 맨 왼쪽 데이터부터 탐색을 시작한다.
② 현재 확인하는 데이터가 찾고자 하는 데이터라면 탐색을 종료한다.
③ 만약 찾고자 하는 데이터가 아니라면 오른쪽 데이터로 넘어간다.
④ ②~③단계를 반복하며 모든 데이터를 확인하면 탐색을 종료한다.
32
03. 탐색 알고리즘
33
03. 탐색 알고리즘
② 이분 탐색
① 정렬된 데이터의 가운데 위치부터 확인한다.
② 현재 확인하는 데이터가 찾고자 하는 데이터라면 탐색을 종료한다.
③ 현재 확인한 데이터가 정렬 순서상 찾고자 하는 데이터보다 앞에 있으면 오른쪽 범위를 탐색하고, 뒤에 있으면 왼쪽 범위를 탐색한다.
④ ①~③단계를 반복하며 모든 데이터를 확인하면 탐색을 종료한다.
34
03. 탐색 알고리즘
35
03. 탐색 알고리즘
탐색 알고리즘의 비교
36
03. 탐색 알고리즘
여러 가지 방법으로 탐색 체험하기
자신이 생각한 숫자와 정답을 맞히기까지 걸린 횟수를 적어 보자.
만약 숫자의 범위가 [1~1,000]으로 늘어나면 몇 번의 기회가 필요한지 적어 보자.
37
101
6
최대 10번의 기회가 필요하다.
알고리즘의 효율성 평가
38
• 효율적인 알고리즘의 선택
기준을 설명할 수 있다.
• 정렬과 탐색 알고리즘의 효율
성을 비교·분석할 수 있다.
빅-오 표기법 알고리즘이 데이터를 처리하는 데 걸리는 시간을 측정하여 알고리즘 성능을 평가하는 것으로, 보통 최악의 경우를 예상하여 성능을 평가한다. 이를 통해 해당 알고리즘의 최저 성능을 파악하고 비교한다. 빅-오 표기법은 알고리즘의 개략적인 성능을 표시하기 때문에 정확한 단위 연산의 적용 횟수나 소요 시간을 나타내지 않고 데이터의 크기와 데이터 처리에 필요한 단위 연산의 적용 횟수와의 관계를 나타낸다.
39
04. 알고리즘의 효율성 평가
정렬 알고리즘 비교하기
40
모둠에서 정한 학급 정렬의 기준을 적어 보자.
자신이 선택한 정렬 알고리즘을 사용하여 정렬하고, 비교 횟수와 교환 횟수를 계산해 보자.
모둠원이 계산한 알고리즘의 효율성을 비교하고, 효율적인 알고리즘을 순서대로 나열해 보자.
41
승점
득점
선택 정렬
15번
5번
퀵 정렬 > 삽입 정렬 > 선택 정렬 > 버블 정렬
탐색 알고리즘 비교하기
순차 탐색을 사용하여 탐색했을 때의 효율성을 계산해 보자.
이분 탐색을 사용하여 탐색했을 때의 효율성을 계산해 보자.
42
8번
2번
어떤 알고리즘이 효율적이라고 생각하는지 탐색 횟수를 비교하여 설명해 보자.
순차 탐색이 효율적인 상황과 이분 탐색이 효율적인 상황을 찾아 작성해 보자(현재 데이터는 정렬되어 있지 않은 상태이다).
43
순차 탐색의 탐색 횟수가 이분 탐색에 비해 4배 차이 나기 때문에 이분 탐색이 효율적이다.
저장된 데이터를 탐색하는 빈도수가 낮을 때
저장된 데이터를 탐색하는 빈도수가 높을 때