2. 발표자
• 최재원
• 2015 아주대학교 게임 창업 동아리 Beep 회장.
• 현재 아주대학교에서 컴퓨터 공학, 수학 전공 중.
• 현재 Quramsoft internship 중.
• 이전에 Bluehole studio, 아주대학교 미디어학과 연구실 Visual
computing lab에서 internship.
• 한국 애니메이션 고등학교 9기 컴퓨터 게임 제작과 졸업.
• Contact : jainersoer@ajou.ac.kr
4. 내가 잡은 최소 목표
• 자료구조와 알고리즘을 직접 코딩해본다.
• 서로 진지빨고 문제를 풀기 위해서 머리를 맞대본다.
• git과 같은 필수 유틸리티를 사용해 본다.
5. Plans
• 총 6주, 주 2회, 각 1시간 30분.
• 진행 형식
• 한 사람씩 돌아가면서 한 토픽을 존내 파온다.
• PT를 작성해 와서 앞에서 발표한다.
• 발표 이후에는 PT를 slideshare에 올릴 예정.
• 남은 시간동안 구현을 하고, 다 못한 구현은 꼭 다음 시간까지 해온다.
• Googling, 서로 머리 맞대고 고민하는 건 적극 권장(질문의 형식이 아닌
토의의 형식으로).
6. Books
• CLRS, Introduction to Algorithms
• Levitin , Introduction to the Design & Analysis of
Algorithms(학교 알고리즘 수업 교재)
• Programming Pearls
• 프로그래밍 대회에서 배우는 알고리즘 문제 해결 전략
• 컴퓨터 프로그램의 구조와 해석(알고리즘 책은 아니지만….)
• …
8. Restrictions
• Use actively “git, github.com, and google cloud engine”.
• Coding without a debugger.
• Coding without a compiler.
• 여기서 작성한 모든 PT는 slideshare에 공유할 예정.
9. Today’s topics
• What is an “Algorithm”?
• Analysis of insertion sort vs merge sort
• Asymptotic representation
• Array vs linked list
• Implementation of a linked list
10. What is an “Algorithms”?
1. 유한성 : 알고리즘은 단계들을 반드시 유한한 횟수로 거친 후에 종
료해야 한다.
2. 명확성 : 알고리즘의 각 단계는 반드시 명확하게 정의되어야 한다.
3. 입력 : 알고리즘은 0 또는 그 이상의 입력들을 가진다.
4. 출력 : 알고리즘은 하나나 그 이상의 출력들을 가진다.
5. 효과성(effectiveness) : 이론적으로 알고리즘의 모든 연산들이 사
람이 종이와 연필을 이용해서 유한한 시간 안에 정확하게 수행할
수 있을 정도로 충분히 단순해야 한다.
Reference : 류광 역, Donald E. Knuth 저, The Art of Computer Programmig 1
11. • Input: a random linear array A.
• Output: a sorted array A.
• Process:
Reference : http://en.wikipedia.org/wiki/Insertion_sort
Insertion sort vs merge sort
• Input: a random linear array A.
• Output: a sorted array A.
• Process:
http://en.wikipedia.org/wiki/Merge_sort
12. What is “Asymptotic Rep.”
• 대강의 알고리즘의 성능을 나타내는 집합
• 인풋 양을 Input으로, 걸리는 시간을 Output으로 하는 함수
• f(n) = O(g(n)) ; There exist c, n0 such that f(n) < cg(n) for any n
>= n0 => 오래 걸려도 이정도 안에는 된다.
• f(n) = Sigma(g(n)) ; There exist c, n0 such that f(n) > cg(n) for
any n >= n0 => 아무리 빨라도 이정도다.
• f(n) = Theta(g(n)) ; There exist c0, c1, n0 such that
c1*g(n) < f(n) < c2*g(n) for any n >= n0
=> 이 바운더리 안에 들어간다.
13. Insertion sort vs merge sort
Reference : Tosin Joseph, An experiment to determine practical efficiency of
insertion sort, merge sort and quick sort
14. Insertion sort vs merge sort
• Input: a random linear array A.
• Output: a sorted array A.
• Process:
Reference : http://en.wikipedia.org/wiki/Insertion_sort
• Input: a random linear array A.
• Output: a sorted array A.
• Process:
15. Array vs linked list
Array Linked list
장점 Random access가 O(1)
위치를 알고 있다는
가정 하에 삽입/삭제가 O(1)
단점 삽입/삭제 시 O(n) Random access가 O(n)
16. (과제)
Implementation of linked list
• Description
• Node : linked list의 node. Data로 int형 하나를 가지며, 다음 노드를 가리키는 변수를 포함한다.
• Requirement : 다음 네 가지 함수를 작성하고, 적절한 instance를 들어 구현이 잘 되었음을 보이시오.
• initialize
• destroy
• push(Node* prev, int data) ; prev node의 다음에 data 값의 node를 삽입한다.
• destroy(Node* target) ; target node를 삭제한다.
• Rule
• 언어는 자유.
• 웬만하면 같은 언어로 구현된 코드를 참고하지 마시오.(Ex) C++로 작성하는데 Java 코드를 참고하는건 ㄱㅊ. C++ 코
드는 안 ㄱㅊ
• 되도록 의사코드를 보고 작성하고, 구성원들과의 토론은 완전 장려. 굳이 베끼지 말라능.