You are on page 1of 25

자바로 쉽게 배우는

알고리즘
이충기 지음
Algorithm
CHAPTER

01
알고리즘
소개

1.1 알고리즘이란 ?
1.2 알고리즘적 문제 해결 과정
1.3 알고리즘의 표현
1.4 알고리즘의 분류
Algorithm

알고리즘이란 ?

 문제를 해결하기 위한 단계적 절차 또는 방법

 순서대로 구체적이고 명확하게 기술해야 함

 유효한 입력을 받아 실행한 결과인 해 ( 답 ) 를 출력

 예 : 요리법 , 길 찾기

알고리즘 Chapter 01 알고리즘 소개 3


Algorithm

알고리즘의 개념

알고리즘 Chapter 01 알고리즘 소개 4


Algorithm

알고리즘의 3 가지 조건

1. 명확성
– 알고리즘의 각 단계는 애매모호하지 않고 명확해야 한다 .

2. 정확성
– 모든 유효한 입력에 대해 올바른 해를 출력해야 한다 .

3. 정지성
– 유효한 입력이 주어지면 유한한 시간 내에 종료되어야 한다 .

알고리즘 Chapter 01 알고리즘 소개 5


Algorithm

알고리즘의 3 가지 조건

알고리즘 Chapter 01 알고리즘 소개 6


수정한 라면 요리법
Algorithm

알고리즘 Chapter 01 알고리즘 소개 7


라면 요리법
Algorithm

알고리즘 Chapter 01 알고리즘 소개 8


Algorithm

합 계산 알고리즘의 실행 결과

알고리즘 Chapter 01 알고리즘 소개 9


Algorithm

알고리즘이 아닌 예

product = 0
while (product < 20) {
product = product * 2
}

알고리즘 Chapter 01 알고리즘 소개 10


Algorithm

‘ 홍길동’ 찾는 문제

알고리즘 Chapter 01 알고리즘 소개 11


Algorithm

문제 해결 과정

알고리즘 Chapter 01 알고리즘 소개 12


문제 이해 과정
Algorithm

알고리즘 Chapter 01 알고리즘 소개 13


탐색 알고리즘의 설계 과정
Algorithm

알고리즘 Chapter 01 알고리즘 소개 14


알고리즘의 정확성 증명
Algorithm

 모든 유효한 입력에 대해 유한한 시간 내에 정확한


결과를 만들어 낸다는 것을 증명해야 한다 .

 증명 방법 예 : 수학적 귀납법

알고리즘 Chapter 01 알고리즘 소개 15


알고리즘의 효율성
Algorithm

1. 시간 효율성
– 얼마나 빨리 실행되는 지를 나타낸다 .

2. 공간 효율성
– 컴퓨터 메모리를 얼마나 사용하는지를 나타낸다 .

3. 코드 효율성
– 코드가 얼마나 이해하기 쉬운가를 나타낸다 .

알고리즘 Chapter 01 알고리즘 소개 16


알고리즘의 표현
Algorithm

 자연어 ( 한글 또는 영어 )

 의사 코드 (Pseudocode)

 순서도 (Flowchart)

 프로그래밍 언어 ( 자바 , C 또는 파이선 등 )

알고리즘 Chapter 01 알고리즘 소개 17


Algorithm

예 : 최댓값 찾기 알고리즘 – 한글

1. 배열의 첫 번째 요소를 최댓값으로 정한다 .

2. 배열의 다음 요소와 최댓값을 비교한다 . 만약 다음

요소가 최댓값보다 크다면 최댓값을 그 요소로 바꾼다 .

3. 배열 내에 비교할 요소가 남아 있으면 2 단계로 가고


아니면 종료한다 .

알고리즘 Chapter 01 알고리즘 소개 18


Algorithm
예 : 최댓값 찾기 알고리즘 – 의사 코드

FindMaximum(A[0 . . N - 1])
// 배열 내의 최댓값을 찾는다 .
// 입력 : 크기가 N(> 1) 인 숫자들의 배열 A
// 출력 : 배열 A 내의 최댓값
max = A[0]

for (i = 1; i < N; i++)


if (A[i] > max) max = A[i]

return max

알고리즘 Chapter 01 알고리즘 소개 19


예 : 최댓값 찾기 자바 프로그램
Algorithm

public class FindMaximum {


public static void main(String[] args) {
int[ ] intArray = {72, 60, 83, 47, 89, 95};
int maximum;
maximum = findMaximum(intArray);
System.out.println(" 최댓값 = " + maximum);
}
public static int findMaximum(int[ ] A) {
int i, max;
max = A[0];
  for (i = 1 ; i < A.length ; i++)
if (A[i] > max) max = A[i];
return max;
}
}
알고리즘 Chapter 01 알고리즘 소개 20
Algorithm

최댓값을 구하는 과정

알고리즘 Chapter 01 알고리즘 소개 21


Algorithm

알고리즘 설계 기법
 분할 정복 (Divide-and-Conquer)

 동적 계획 (Dynamic Programming)

 탐욕 기법 (Greedy Technique)

 되추적 (Backtracking)

 분기한정 (Branch-and-Bound)

알고리즘 Chapter 01 알고리즘 소개 22


Algorithm

알고리즘 설계 기법

 억지 기법 (brute-force technique)

 무작위 (random) 알고리즘

 근사 (approximate) 알고리즘

 병렬 (parallel) 알고리즘

 분산 (distributed) 알고리즘

 양자 (quantum) 알고리즘

 유전자 (genetic) 알고리즘

알고리즘 Chapter 01 알고리즘 소개 23


문제 유형에 따른 알고리즘의 분류
Algorithm

 정렬 (sorting) 알고리즘

 탐색 (searching) 알고리즘

 문자열 처리 (string processing) 알고리즘

 그래프 (graph) 알고리즘

 조합 (combinatorial) 알고리즘

 기하학적 (geometric) 알고리즘

 수치 (numerical) 알고리즘

알고리즘 Chapter 01 알고리즘 소개 24


요약
Algorithm

 알고리즘 : 문제를 해결하기 위한 단계적 절차 또는 방법

 알고리즘의 조건 : 명확성 , 정확성 , 정지성

 문제를 해결하는 효율적인 알고리즘 선택

 문제 해결 과정들
– 문제 이해

– 알고리즘 설계

– 정확성 증명

– 효율성 분석

– 구현

 알고리즘 표현 : 자연어 ( 한글 또는 영어 ), 의사 코드

 알고리즘 설계 기법 : 분할 정복 , 동적 계획 , 탐욕 기법 , 되추적 , 분기한정

알고리즘 Chapter 01 알고리즘 소개 25

You might also like