19
알고리즘 과목소개

프로그래밍 가르치기 Teaching Programming · 기본 정보 • 교재 –문병로 저, 쉽게 배우는 알고리즘: 관계중심의 사고법, 한빛미디어 –Cormen,

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 프로그래밍 가르치기 Teaching Programming · 기본 정보 • 교재 –문병로 저, 쉽게 배우는 알고리즘: 관계중심의 사고법, 한빛미디어 –Cormen,

알고리즘

과목소개

Page 2: 프로그래밍 가르치기 Teaching Programming · 기본 정보 • 교재 –문병로 저, 쉽게 배우는 알고리즘: 관계중심의 사고법, 한빛미디어 –Cormen,

기본 정보

• 교재 – 문병로 저, 쉽게 배우는 알고리즘: 관계중심의 사고법, 한빛미디어

– Cormen, Leiserson, Rivest, Introduction to Algorithms. MIT Press (번역판 있음)

• 4개의 프로그래밍 과제

• 평가 – 시험 50%, 프로그래밍과제 40%, 출석 및 참여도 10%

• 강의 홈페이지 – http://alg.pknu.ac.kr

SPRING 2012 ALGORITHMS 2

Page 3: 프로그래밍 가르치기 Teaching Programming · 기본 정보 • 교재 –문병로 저, 쉽게 배우는 알고리즘: 관계중심의 사고법, 한빛미디어 –Cormen,

SPRING 2012 ALGORITHMS 3

1. 회원가입을 한다.

2. 수강하는 과목그룹에 가입을 한다.

3. 각 그룹에 속한 포럼에서 수업자료를 다운받고 토론에 참여한다.

Page 4: 프로그래밍 가르치기 Teaching Programming · 기본 정보 • 교재 –문병로 저, 쉽게 배우는 알고리즘: 관계중심의 사고법, 한빛미디어 –Cormen,

프로그래밍 교육과정

C언어 객체지향

프로그래밍 자료구조 알고리즘

SPRING 2012 ALGORITHMS 4

Page 5: 프로그래밍 가르치기 Teaching Programming · 기본 정보 • 교재 –문병로 저, 쉽게 배우는 알고리즘: 관계중심의 사고법, 한빛미디어 –Cormen,

프로그래밍 패러다임 쉬프트

계산(computation) 중심

• 배치 처리/절차적 시스템

• 알고리즘 중심

• 효율성

상호작용(interaction) 중심

• Interactive 시스템

• 모듈들의 구조와 그들간의 상

호작용

• 확장성, 호환성, 범용성 등

SPRING 2012 ALGORITHMS 5

open source

code

various

libraries

Procedural

view

Architectural

view

Page 6: 프로그래밍 가르치기 Teaching Programming · 기본 정보 • 교재 –문병로 저, 쉽게 배우는 알고리즘: 관계중심의 사고법, 한빛미디어 –Cormen,

왜 알고리즘?

1. 영리하게 프로그래밍 하기

2. 알고리즘의 공통적인 구조(전략)를 익혀서 응용하기

3. 모두가 아는 알고리즘 알고 응용하기

4. 창의적으로 공학적 문제 해결하기 – 새로운 알고리즘 개발하기

6 SPRING 2012 ALGORITHMS

Fundamental knowledge and skills

Page 7: 프로그래밍 가르치기 Teaching Programming · 기본 정보 • 교재 –문병로 저, 쉽게 배우는 알고리즘: 관계중심의 사고법, 한빛미디어 –Cormen,

영리하게 프로그래밍하기

• 크기 순으로 정렬된 배열이 있다. 정렬된 상태가 유지되도록 새로운 데이터를 삽입하는 함수를 작성하라.

SPRING 2012 ALGORITHMS 7

2 5 6 9 12 16 21 33

13

Page 8: 프로그래밍 가르치기 Teaching Programming · 기본 정보 • 교재 –문병로 저, 쉽게 배우는 알고리즘: 관계중심의 사고법, 한빛미디어 –Cormen,

영리하게 프로그래밍하기

• 크기 순으로 정렬된 배열이 있다. 정렬된 상태가 유지되도록 새로운 데이터를 삽입하는 함수를 작성하라.

SPRING 2012 ALGORITHMS 8

2 5 6 9 12 16 21 33 13

맨 뒤에 삽입한 후 정렬한다.

Page 9: 프로그래밍 가르치기 Teaching Programming · 기본 정보 • 교재 –문병로 저, 쉽게 배우는 알고리즘: 관계중심의 사고법, 한빛미디어 –Cormen,

영리하게 프로그래밍하기

• 크기 순으로 정렬된 배열이 있다. 입력으로 주어진 값과 가장 가까운(차이가 적은) 값을 찾아라.

SPRING 2012 ALGORITHMS 9

2 5 6 9 12 16 21 33

13

Page 10: 프로그래밍 가르치기 Teaching Programming · 기본 정보 • 교재 –문병로 저, 쉽게 배우는 알고리즘: 관계중심의 사고법, 한빛미디어 –Cormen,

영리하게 프로그래밍하기

• 크기 순으로 정렬된 배열이 있다. 입력으로 주어진 값과 가장 가까운(차이가 적은) 값을 찾아라.

SPRING 2012 ALGORITHMS 10

2 5 6 9 12 16 21 33

13

이진검색을 해서 같은 값을 찾으면 끝. 같은 값이 없으면 처음부터 하나

씩 순서대로 비교해본다.

Page 11: 프로그래밍 가르치기 Teaching Programming · 기본 정보 • 교재 –문병로 저, 쉽게 배우는 알고리즘: 관계중심의 사고법, 한빛미디어 –Cormen,

영리하게 프로그래밍 하기

• 중복된 값이 존재하는가? 혹은 찾아라.

SPRING 2012 ALGORITHMS 11

12 5 16 19 12 13 2 33

모든 쌍을 비교해본다.

Page 12: 프로그래밍 가르치기 Teaching Programming · 기본 정보 • 교재 –문병로 저, 쉽게 배우는 알고리즘: 관계중심의 사고법, 한빛미디어 –Cormen,

영리하게 프로그래밍 하기

• 주어진 문자열의 문자들을 k칸 왼쪽으로 circular하게 shift하라.

SPRING 2012 ALGORITHMS 12

a l g o r i t h m

a l g o r i t h m

K=4인 경우

한 칸씩 shift시키는 일을 k번 반복한다.

Page 13: 프로그래밍 가르치기 Teaching Programming · 기본 정보 • 교재 –문병로 저, 쉽게 배우는 알고리즘: 관계중심의 사고법, 한빛미디어 –Cormen,

Unlike the advanced methods, the aha! insights of

algorithms don't come only after extensive study; they're

available to any programmer willing to think seriously

before, during and after coding.

- from “Programming Pearls”

SPRING 2012 ALGORITHMS 13

Page 14: 프로그래밍 가르치기 Teaching Programming · 기본 정보 • 교재 –문병로 저, 쉽게 배우는 알고리즘: 관계중심의 사고법, 한빛미디어 –Cormen,

공통적인 알고리즘의 구조

• 수많은 알고리즘. 하지만 몇 가지 응용 가능한 기본 구조.

14 SPRING 2012 ALGORITHMS

Greedy Method

Dynamic

Programming

Backtracking Branch and

Bound

Divide-and-Conquer

Recursion

Page 15: 프로그래밍 가르치기 Teaching Programming · 기본 정보 • 교재 –문병로 저, 쉽게 배우는 알고리즘: 관계중심의 사고법, 한빛미디어 –Cormen,

최단경로문제

SPRING 2012 ALGORITHMS 15

1

2

4

3

8 5

7

6

1

5

2

2

9

8

5 1

9

6 3

인접행렬 A

0

1 2 3 4 5 6 7 8

1

2

3

4

5

6

7

8

1 5 ∞ ∞ ∞ ∞ ∞

1 0 8 5 9 ∞ ∞ ∞

5 8 0 ∞ 6 ∞ 1 3

∞ 5 ∞ 0 2 ∞ ∞ ∞

∞ 9 6 2 0 2 ∞ ∞

∞ ∞ ∞ ∞ 2 0 ∞ ∞

∞ ∞ 1 ∞ ∞ ∞ 0 9

∞ ∞ 3 ∞ ∞ ∞ 9 0

Page 16: 프로그래밍 가르치기 Teaching Programming · 기본 정보 • 교재 –문병로 저, 쉽게 배우는 알고리즘: 관계중심의 사고법, 한빛미디어 –Cormen,

void findAllPairShortestPaths( int A[][] ) {

int d[N][N]; // set to be equal to A

for ( int k=1; k<=N; k++ ) {

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

for ( int j=1; j<=N; j++ ) {

if ( d[i][j] > d[i][k]+d[k][j] )

d[i][j] = d[i][k]+d[k][j];

}

}

}

print d;

}

SPRING 2012 ALGORITHMS 16

“A problem that seems difficult

may have a simple, unexpected solution.”

Page 17: 프로그래밍 가르치기 Teaching Programming · 기본 정보 • 교재 –문병로 저, 쉽게 배우는 알고리즘: 관계중심의 사고법, 한빛미디어 –Cormen,

알려진 알고리즘 배우기

• 알고리즘계의 수퍼스타들

17

Binary Heap

Hashing

Prim’s Algorithm

DFS/BFS

Binary Search Tree

Binary Search

Quicksort

Dijkstra’s Algorithm

SPRING 2012 ALGORITHMS

You should learn them

because they are part of programmer’s vocabulary.

Page 18: 프로그래밍 가르치기 Teaching Programming · 기본 정보 • 교재 –문병로 저, 쉽게 배우는 알고리즘: 관계중심의 사고법, 한빛미디어 –Cormen,

알고리즘 현실 적용의 몇몇 예들

• 구글 검색 알고리즘

• 전세계 주식거래의 70%가 프로그램에 의해 이루어짐

• 로봇 청소기

• 대형 온라인 소매점에서의 판매가격 결정 알고리즘

• 영화 및 음반의 흥행/판매량 예측 시스템

SPRING 2012 ALGORITHMS 18

Page 19: 프로그래밍 가르치기 Teaching Programming · 기본 정보 • 교재 –문병로 저, 쉽게 배우는 알고리즘: 관계중심의 사고법, 한빛미디어 –Cormen,

Thank You.

19 SPRING 2012 ALGORITHMS