sangwook lee deogi high school - edpia.netedpia.net/info/materials/3-2.pdf · 이진탐색...

61
정보 Sangwook Lee Deogi High School

Upload: others

Post on 22-Sep-2019

2 views

Category:

Documents


0 download

TRANSCRIPT

정보

Sangwook LeeDeogi High School

III 문제 해결과 프로그래밍

1 추상화

2 알고리즘

3 프로그래밍

3

2 알고리즘

2-1 알고리즘 설계

2-2 알고리즘 분석

4

2-1 알고리즘 설계 (p.108)

• 순차, 선택, 반복 구조의 흐름을 설명할 수

있다.

• 다양한 제어 구조를 활용하여 논리적이고 효

율적인 알고리즘을 설계할 수 있다.

학습 목표

5

[1] 알고리즘 제어 구조 (p.109)

• 알고리즘(algorithm)이란

– 문제를 해결하기 위한 논리적인 절차나 방법

• 생활 속의 알고리즘

– 자동 판매 문제를 해결하기 위한 자판기를 작동시키는 절차

– 배고픔의 문제를 해결하기 위한 음식을 배달시켜 먹는 절차

6

[1] 알고리즘 제어 구조 (p.109)

• 알고리즘의 조건

– 입력과 출력이 있어야 한다

– 처리 과정이 명확해야 한다

– 실행 가능해야 한다

– 종료되어야 한다

배고픔 해결알고리즘에서 입출력은…

음식 선택, 음식값 지불, 음식 도착 등이해당

7

[1] 알고리즘 제어 구조 (p.109)

• 알고리즘 표현 도구(방법)

– 자연어

– 순서도

– 의사코드

– 프로그래밍 언어

8

[1] 알고리즘 제어 구조 (p.109)

• 자연어

– 사람들이 사용하는 일반(일상)적인 언어

– 예) 라면 끓이는 알고리즘을 자연어로 표현하면…

냄비에 물을 넣고

냄비를 가스레인지에 올리고

불을 켜고

물이 끓으면 면과 스프를 넣고

다 익을 때까지 기다리고

불을 끄고

맛있게 냠냠~

9

[1] 알고리즘 제어 구조 (p.109)

• 순서도

– 여러 가지 도형(기호)을 화살표로 연결하여 처리 순서를 표현한 것

10

[1] 알고리즘 제어 구조 (p.109)

• 순서도에 사용되는 도형

(read, print 등을 표시하여 입출력 구분 필요)

(주로 C 언어의 for 문장을 표현할때사용)

(변수 선언 및 초기화할때사용)

(편리하고 가독성이 좋아 출력 입출력 도형보다 많이 사용)

단말

처리

입출력

판단

반복

흐름

준비

출력

(선택이나 반복 구조를 만들때 사용)

11

[1] 알고리즘 제어 구조 (p.109)

• 순서도 예

출력 결과는?

6

START

A = A + 1

A = 1

A

END

A > 5No

Yes

12

[1] 알고리즘 제어 구조 (p.109)

• 의사코드(pseudo-code)

– 일상적으로 사용하는 언어(자연어)의 단어나 문장을 특정 프로그래밍 언어의 형태로 표현한 것

<C 스타일 의사코드> 아침이 올때까지…할 일을 작성한 의사코드

(실제 컴퓨터에서 실행되지 않음)

13

[1] 알고리즘 제어 구조 (p.109)

• 알고리즘 속에 존재하는 작업 처리 흐름(절차) 유형

– 순차적 처리 흐름: 위에서 아래로 처리

– 선택적 처리 흐름: 둘 이상의 작업 중에서 하나만 처리

– 반복적 처리 흐름: 특정 작업을 반복하여 처리

<알고리즘 속 작업 처리 흐름>

순차 선택 반복

14

[1] 알고리즘 제어 구조 (p.109)

• 제어 구조

– 작업 처리 흐름을 표현한 것(문장이나 그림 구조)

알고리즘을 작성하는 과정은

제어 구조를 만들어 가는 과정

15

[1] 알고리즘 제어 구조 (p.109)

• 제어 구조 종류

– 순차 (제어) 구조

• 순차적 처리 흐름을 표현한 것

– 선택 (제어) 구조

• 선택적 처리 흐름을 표현한 것

– 반복 (제어) 구조

• 반복적 처리 흐름을 표현한 것

16

[1] 알고리즘 제어 구조 (p.109)

• 순서도로 표현한 제어 구조

– 순차 (제어) 구조

• 작업을 제시된 순서대로 처리하는 구조

문장 1

문장 2

문장 3

17

[2] 알고리즘 설계와 작성 (p.110)

• 순차 구조가 사용된 알고리즘 예

<1부터 100까지의 합을 출력하는 알고리즘>

START

sum = 100*(100+1)/2

sum = 0

END

sum

18

[1] 알고리즘 제어 구조 (p.109)

• 순서도로 표현한 제어 구조

– 선택 (제어) 구조

• 조건에 따라 여러 작업 중 하나를 선택하여 처리하는 구조

문장 1 문장 2

조건식

아니요

만약…

세개의 문장 중에서

하나를

선택하려면?

19

[1] 알고리즘 제어 구조 (p.109)

• 순서도로 표현한 제어 구조

– 선택 (제어) 구조

• 조건에 따라 여러 작업 중 하나를 선택하여 처리하는 구조

문장 1 문장 2

조건식

아니요

문장 3

조건식

아니요

20

[1] 알고리즘 제어 구조 (p.109)

• 순서도로 표현한 제어 구조

– 반복 (제어) 구조

• 조건에 따라 특정 작업을 반복하여 처리하는 구조

문장 1 문장 2

조건식

아니요

21

[2] 알고리즘 설계와 작성 (p.110)

• 반복 구조가 사용된 알고리즘 예

<1부터 100까지의 합을 출력하는 알고리즘>

START

n = n + 1sum = sum + n

n = 0sum = 0

?

판단 도형안에

들어갈 조건식은?

sum

END

Yes

No

22

함께 해결하기 (p.111)

• 순차, 선택, 반복 구조를 찾아 표시해 보자.

순차구조

선택구조

반복구조

“순차 구조는한 작업에서 한 작업으로만진행 가능하고 이전 작업으로돌아갈 수 없는 구조”

“선택이나 반복 구조를 하나의처리 단위로 보았을 때

전체적으로 순차 구조를 가짐”

23

2 알고리즘

2-1 알고리즘 설계

2-2 알고리즘 분석

24

2-2 알고리즘 분석 (p.112)

• 동일한 문제에 대해 다양한 해결 전략과 방

식이 있음을 설명할 수 있다.

• 알고리즘의 성능을 수행 시간의 관점에서 비

교하고 분석하여, 어떤 방식이 더 효율적인지

설명할 수 있다.

학습 목표

25

[1] 동일한 문제에 대한 다양한 알고리즘 (p.113)

• 동일한 문제에 대한 다양한 알고리즘 존재

장소 이동 문제 해결 방법 배고픔 해결 문제 해결 방법

26

[1] 동일한 문제에 대한 다양한 알고리즘 (p.113)

• 1부터 100까지 자연수의 합을 구하는 알고리즘

알고리즘 1 알고리즘 2

27

[1] 동일한 문제에 대한 다양한 알고리즘 (p.113)

알고리즘 1 알고리즘 2

덧셈을 반복적으로 수행하는

반복 구조를 사용

덧셈, 곱셈, 나눗셈 연산을

한 번만 수행하는

순차 구조를 사용

알고리즘2는가우스 덧셈 공식을 이용하여

1부터 100까지 정수의합을 구함

28

[2] 수행 시간의 관점에서 성능 분석 (p.114)

• 정렬이란

– 자료를 일정한 기준에 의해 나열하는 것

• 정렬 순서

– 오름차순 정렬

• 작은 것부터…

– 내림차순 정렬

• 큰 것부터…

• 자료를 정렬하는 이유

– 필요한 자료를 효율적으로 탐색하기 위해

29

[2] 수행 시간의 관점에서 성능 분석 (p.114)

• 정렬 알고리즘 종류

– 버블(bubble) 정렬

– 선택(selection) 정렬

<다양한 정렬 알고리즘>

30

[2] 수행 시간의 관점에서 성능 분석 (p.114)

• 버블 정렬이란

버블 정렬이라고 하는 이유는?

데이터가 교환되면서 이동하는 모양이

물속의 거품(bubble)이 보글보글 떠오르는 모양과 유사하기때문

(오름차순의 경우)

인접한 2개의 자료를 비교하면서

가장 큰 자료를 맨 뒤로 보내는 정렬 방식

31

[2] 수행 시간의 관점에서 성능 분석 (p.114)

• 버블 정렬 알고리즘 (오름차순)

① 정렬이 안 된 자료들 중에서앞쪽부터 인접한 두 개의 자료를 비교하여앞의 자료가 더 크면 위치를 교환하는 작업을 반복하면서가장 큰 자료를 맨 뒤로 보냄

② 정렬되지 않은 나머지 값들에 대해 ① 반복

32

[2] 수행 시간의 관점에서 성능 분석 (p.114)

• 버블 정렬 예

– 정렬 전 자료

n개의 자료를 버블 정렬 시가장 큰 자료를 맨 뒤로 보내는 작업을

n-1번(단계) 반복하면 정렬 완료

33

[2] 수행 시간의 관점에서 성능 분석 (p.114)

• 버블 정렬 예

– 1단계: 가장 큰 자료를 오른쪽 맨 끝으로 보내기

34

[2] 수행 시간의 관점에서 성능 분석 (p.114)

• 버블 정렬 예

– 2단계: 두 번째 큰 자료를 오른쪽 끝에서 두 번째로 보내기

35

[2] 수행 시간의 관점에서 성능 분석 (p.114)

• 버블 정렬 예

– 3단계: 세 번째 큰 자료를 오른쪽 끝에서 세 번째로 보내기

36

[2] 수행 시간의 관점에서 성능 분석 (p.114)

• 버블 정렬 예

– 4단계: 네 번째 큰 자료를 오른쪽 끝에서 네 번째로 보내기

37

[2] 수행 시간의 관점에서 성능 분석 (p.114)

• 버블 정렬 예

– 정렬 완료

비교 횟수: ? 회10

교환 횟수: ? 회7

1단계정렬

2단계정렬

3단계정렬

4단계정렬

38

[2] 수행 시간의 관점에서 성능 분석 (p.114)

• 버블 정렬 비교 횟수 (최악의 경우)

– 자료의 개수가 n개 일 때,

𝑛 𝑛 − 1

2

(n-1) + (n-2) + … + 2 + 1 =

자료의 교환은…이미정렬이되어있다면 한번도 교환이일어나지않지만,한단계에서보통 1회이상은 교환이일어나기때문에전체단계에서보통 (n-1)회이상은 교환이일어남

1단계비교 횟수

2단계비교 횟수

n-2단계비교 횟수

n-1단계비교 횟수

+ + … + +

39

[2] 수행 시간의 관점에서 성능 분석 (p.114)

버블 정렬이 처리 속도가 느린 이유

앞쪽 자료부터 인접한 자료를 비교하여상호 교환하는 정렬 방법으로

자료의 비교와 교환이 많이 일어나기 때문

40

[2] 수행 시간의 관점에서 성능 분석 (p.114)

Bubble-sort with Hungarian folk dance

일반적인 버블 정렬 알고리즘과 차이점…1. 마지막 두 자료 비교 후 교환이 없으면 두 자료 모두 정렬된 것으로 간주

2. 어떤단계를 종료할 때까지 교환이 한 번도 없으면 정렬이 완료된 것으로 간주

41

[2] 수행 시간의 관점에서 성능 분석 (p.114)

• 버블 정렬 C 코드

void main()

{

int data[6] = {5, 3, 8, 1, 2, 7};

int x, y, temp;

for (x = 0; x <= 4; x++) {

for (y = 0; y <= 4-x; y++) {

if (data[y] > data[y+1]) {

temp = data[y];

data[y] = data[y+1];

data[y+1] = temp;

}

}

}

printf("버블 정렬 결과\n");

for (x = 0; x <= 5 ; x++) printf("%d ", data[x]);

}

인접한 두 자료를 비교하여앞 자료가 더 크면 변숫값 교환

인접한 두 자료 중앞 자료의 위치(y)를 1씩 증가

정렬을 위해 0~4(5단계) 반복 지정

x 값의 2가지 의미(역할)① 5단계를 반복하기 위해 증가하는 수② 비교하는 두 자료 중

앞 자료의 마지막 위치를 줄이는 수

42

[2] 수행 시간의 관점에서 성능 분석 (p.115)

• 선택 정렬이란

(오름차순의 경우)

가장 작은 자료를 선택하여 첫 번째 자료와 교환하는 정렬 방식

43

[2] 수행 시간의 관점에서 성능 분석 (p.115)

• 선택 정렬 알고리즘 (오름차순)

① 정렬이 안 된 자료들 중에서첫 번째 자료를 (임시) 최솟값으로 지정하고최솟값과 다음 자료들을 비교하여더 작은 자료를 새 최솟값으로 지정하는 과정을 반복하면서가장 작은 자료를 찾아서 첫 번째 자료와 교환

② 정렬되지 않은 나머지 값들에 대해 ① 반복

최솟값 위치 최솟값 위치

44

[2] 수행 시간의 관점에서 성능 분석 (p.115)

• 선택 정렬 예

최솟값 위치

45

[2] 수행 시간의 관점에서 성능 분석 (p.115)

• 선택 정렬 예

– 정렬 완료

비교 횟수: ? 회10

교환 횟수: ? 회3

4단계정렬

3단계정렬

2단계정렬

1단계정렬

46

[2] 수행 시간의 관점에서 성능 분석 (p.115)

• 선택 정렬 비교 횟수

– 자료의 개수가 n개 일 때,

자료의 교환은…이미정렬이되어있다면 한번도 교환이일어나지않지만,한단계에서 0회 또는 1회 교환이일어나기때문에전체단계에서 (n-1)회이하로 교환이일어남

𝑛 𝑛 − 1

2

(n-1) + (n-2) + … + 2 + 1 =

1단계비교 횟수

2단계비교 횟수

n-2단계비교 횟수

n-1단계비교 횟수

+ + … + +

47

[2] 수행 시간의 관점에서 성능 분석 (p.115)

• 선택 정렬 C 코드

void main()

{

int data[6] = {5, 3, 8, 1, 2, 7};

int x, y, min, temp;

for (x = 0; x <= 4; x++) {

min = x;

for (y = x + 1; y <= 5; y++) {

if (data[min] > data[y])

min = y;

}

temp = data[min];

data[min] = data[x];

data[x] = temp;

}

printf("선택 정렬 결과\n");

for (x = 0; x <= 5 ; x++) printf("%d ", data[x]);

}

최솟값보다 더 작은 값을 찾으면해당 값을 새로운 최솟값으로 지정

최솟값의 위치를 첫 번째 값의 위치로 임시 지정

정렬을 위해 0~4(5단계) 반복 지정

x 값의 2가지 의미(역할)① 5단계를 반복하기 위해 증가하는 수② 각 단계에서

첫 번째 값의 위치를 나타내는 수

첫 번째 값과 치솟값을 교환

Q. 이알고리즘에서는첫번째값이최솟값일경우에도불필요한교환이 일어난다.

만약, 첫번째값이최솟값일경우, 교환이안일어나게하려면코드를 어떻게수정하면되는가?

48

[2] 수행 시간의 관점에서 성능 분석 (p.116)

• 탐색이란

– 주어진 자료들 중에서 원하는 자료를 찾는 것

• 탐색 알고리즘 종류

– 순차 탐색(sequential search)

– 이진 탐색(binary search)

49

[2] 수행 시간의 관점에서 성능 분석 (p.116)

• 순차 탐색

– 모든 자료를 처음부터 끝까지 하나씩 순서대로 비교하여 조건에 일치하는 자료를 찾는 방법

첫 번째자료부터 차례로 8이 맞는지 확인하여맞으면 완료하고 맞지 않으면 다음 수를 하나씩 비교하는 과정 반복

<7장의 카드에서 ‘8’이 적힌 숫자 카드를 순차 탐색하는 과정>

50

[2] 수행 시간의 관점에서 성능 분석 (p.116)

• 이진 탐색

– 정렬된 자료를 반으로 나눈 후, 찾는 값이 어느 쪽에 있는지 파악해탐색의 범위를 반으로 줄여가며 자료를 찾는 방법

<7장의 카드에서 ‘8’이 적힌 숫자 카드를 이진 탐색하는 과정>

①전체 자료 중에서 중앙에 있는 6과 찾을 값 8을 비교②찾을 값 8이 6보다 크므로 오른쪽에 있는 자료들을 탐색③ 오른쪽 자료 중에서 중앙에있는 8과 찾을 값 8을 비교④ 중앙에있는 8이 찾을 값 8과 같으므로 탐색을 종료

51

[2] 수행 시간의 관점에서 성능 분석 (p.116)

순차 탐색 이진 탐색

장점알고리즘 간단

자료 정렬 불필요속도 빠름

단점 속도 느림알고리즘 복잡자료 정렬 필요

기타 자료 수가 적을 때 효과적 자료 수가 많을 때 효과적

<순차 탐색과 이진의 장점과 단점>

52

[2] 수행 시간의 관점에서 성능 분석 (p.116)

• 알고리즘의 빠르기 분석 방법

– 중요한 연산의 실행 횟수(= 시간 복잡도)를 계산

☞ 정렬과 탐색 알고리즘에서 중요한 연산은 비교 연산~

– 최선, 최악의 경우 중에서 보통 최악의 연산 횟수를 사용

☞ 최악의 연산 횟수가 작으면 빠른 알고리즘~

탐색 알고리즘에서 최선과 최악의 의미

최선의 경우는, 가장 적은 비교 연산으로 찾는 경우최악의 경우는, 가장 많은 비교 연산으로 찾는 경우

53

[2] 수행 시간의 관점에서 성능 분석 (p.116)

순차 탐색비교 연산 횟수

이진 탐색비교 연산 횟수

<n개의 자료를 탐색할 때 순차 탐색과 이진 탐색의 비교 연산 횟수>

1 1

n log2n + 1

최선의 경우(가장 빨리 찾는 경우)

최악의 경우(가장 늦게 찾는 경우)

예를 들면여기서 log2n 값은..

log2n의값보다작거나같은

최대정수를 의미

log24 = 2.0 → 2log25 ≒ 2.3 → 2log26 ≒ 2.6 → 2log27 ≒ 2.8 → 2log28 = 3.0 → 3

54

[2] 수행 시간의 관점에서 성능 분석 (p.116)

• 알고리즘의 시간 복잡도(time complexity)란

– 알고리즘이 수행된 시간의 양을 의미

– 알고리즘 속 중요한 연산의 실행 횟수를 계산한 값

– 알고리즘의 빠르기를 분석하는 기준이 됨

– 주로 Big O 표기법을 사용하여 나타냄

<Big O 표기법>

최악의 연산 횟수를

계수가 없는 최고차항만으로 표시한 것

55

[2] 수행 시간의 관점에서 성능 분석 (p.116)

• Big O 표기법 예

𝑛 𝑛 − 1

2

𝑛2

𝑙𝑜𝑔2𝑛 + 1

𝑙𝑜𝑔2𝑛

따라서, 선택 정렬의 정렬 속도보다 이진 탐색의 탐색 속도가 더 빠름!

선택 정렬 시최악의 비교 연산 횟수는?

이진 탐색 시최악의 비교 연산 횟수는?

56

[2] 수행 시간의 관점에서 성능 분석 (p.116)

• 시간 복잡도 크기 비교

𝑛3 2𝑛𝑛2

𝑛𝑙𝑜𝑔2𝑛 𝑛𝑙𝑜𝑔2𝑛 𝑛2

이진 탐색 순차 탐색 퀵 정렬 버블, 선택 정렬

2 4

그리고 또한..

57

함께 해결하기 (p.117)

• 다음은 우리 모둠 친구들의 번호를 조사한 것이다. 물음에 답하시오.

1. 친구들의 번호를 버블 정렬과 선택 정렬을 이용하여 각각 오름차순으로정렬할 때, 비교 횟수와 교환 횟수를 알아보자.

구분 버블 정렬 선택 정렬

비교 횟수

교환 횟수

15 15

7 3

[19, 3] [19, 7] [19, 5][8, 3] [8, 7] [8, 5]

[7, 5]

[3, 8][5, 19][7, 8]

함께 해결하기 (p.117)

59

함께 해결하기 (p.117)

• 다음은 우리 모둠 친구들의 번호를 조사한 것이다. 물음에 답하시오.

2. 위와 같이 정렬된 자료에서 ‘19’를 찾으려고 한다. 순차 탐색과 이진탐색을 활용하여 각각 탐색해 보고, 비교 횟수를 적어 보자.

구분 순차 탐색 이진 탐색

비교 횟수 5 2

(단, 자료의 개수 n이 짝수일 경우 n÷2 번째 자료를 중간값으로 간주)

60

함께 해결하기 (p.117)

61