TML studio & Beep
알고리즘 스터디
Orientation
발표자
• 최재원
• 2015 아주대학교 게임 창업 동아리 Beep 회장.
• 현재 아주대학교에서 컴퓨터 공학, 수학 전공 중.
• 현재 Quramsoft internship 중.
• 이전에 Bluehole studio, 아주대학교 미디어학과 연구실 Visual
computing lab에서 internship.
• 한국 애니메이션 고등학교 9기 컴퓨터 게임 제작과 졸업.
• Contact : jainersoer@ajou.ac.kr
(솔직하게) 목표가 뭐지?
• 학점 때문에?
• 취업하려고?
• 실력 쌓으려고?
• 대회에 나가거나 topcoder rating 쌓으려고?
• 왠지 안하면 안될 것 같아서?
내가 잡은 최소 목표
• 자료구조와 알고리즘을 직접 코딩해본다.
• 서로 진지빨고 문제를 풀기 위해서 머리를 맞대본다.
• git과 같은 필수 유틸리티를 사용해 본다.
Plans
• 총 6주, 주 2회, 각 1시간 30분.
• 진행 형식
• 한 사람씩 돌아가면서 한 토픽을 존내 파온다.
• PT를 작성해 와서 앞에서 발표한다.
• 발표 이후에는 PT를 slideshare에 올릴 예정.
• 남은 시간동안 구현을 하고, 다 못한 구현은 꼭 다음 시간까지 해온다.
• Googling, 서로 머리 맞대고 고민하는 건 적극 권장(질문의 형식이 아닌
토의의 형식으로).
Books
• CLRS, Introduction to Algorithms
• Levitin , Introduction to the Design & Analysis of
Algorithms(학교 알고리즘 수업 교재)
• Programming Pearls
• 프로그래밍 대회에서 배우는 알고리즘 문제 해결 전략
• 컴퓨터 프로그램의 구조와 해석(알고리즘 책은 아니지만….)
• …
Topics
• Sorting
• Data structures (e.g. stack, queue, linked list, hash table….)
• Graphs
• Dynamic programming
• Greedy approach
• Anyone more? Huffman coding, Backtracking, Branch
and bound.
Restrictions
• Use actively “git, github.com, and google cloud engine”.
• Coding without a debugger.
• Coding without a compiler.
• 여기서 작성한 모든 PT는 slideshare에 공유할 예정.
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
What is an “Algorithms”?
1. 유한성 : 알고리즘은 단계들을 반드시 유한한 횟수로 거친 후에 종
료해야 한다.
2. 명확성 : 알고리즘의 각 단계는 반드시 명확하게 정의되어야 한다.
3. 입력 : 알고리즘은 0 또는 그 이상의 입력들을 가진다.
4. 출력 : 알고리즘은 하나나 그 이상의 출력들을 가진다.
5. 효과성(effectiveness) : 이론적으로 알고리즘의 모든 연산들이 사
람이 종이와 연필을 이용해서 유한한 시간 안에 정확하게 수행할
수 있을 정도로 충분히 단순해야 한다.
Reference : 류광 역, Donald E. Knuth 저, The Art of Computer Programmig 1
• 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
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

=> 이 바운더리 안에 들어간다.
Insertion sort vs merge sort
Reference : Tosin Joseph, An experiment to determine practical efficiency of 

insertion sort, merge sort and quick sort
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: 

Array vs linked list
Array Linked list
장점 Random access가 O(1)
위치를 알고 있다는 

가정 하에 삽입/삭제가 O(1)
단점 삽입/삭제 시 O(n) Random access가 O(n)
(과제)

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++ 코
드는 안 ㄱㅊ
• 되도록 의사코드를 보고 작성하고, 구성원들과의 토론은 완전 장려. 굳이 베끼지 말라능.

TML studio & Beep 알고리즘 스터디, 오리엔테이션

  • 1.
    TML studio &Beep 알고리즘 스터디 Orientation
  • 2.
    발표자 • 최재원 • 2015아주대학교 게임 창업 동아리 Beep 회장. • 현재 아주대학교에서 컴퓨터 공학, 수학 전공 중. • 현재 Quramsoft internship 중. • 이전에 Bluehole studio, 아주대학교 미디어학과 연구실 Visual computing lab에서 internship. • 한국 애니메이션 고등학교 9기 컴퓨터 게임 제작과 졸업. • Contact : jainersoer@ajou.ac.kr
  • 3.
    (솔직하게) 목표가 뭐지? •학점 때문에? • 취업하려고? • 실력 쌓으려고? • 대회에 나가거나 topcoder rating 쌓으려고? • 왠지 안하면 안될 것 같아서?
  • 4.
    내가 잡은 최소목표 • 자료구조와 알고리즘을 직접 코딩해본다. • 서로 진지빨고 문제를 풀기 위해서 머리를 맞대본다. • git과 같은 필수 유틸리티를 사용해 본다.
  • 5.
    Plans • 총 6주,주 2회, 각 1시간 30분. • 진행 형식 • 한 사람씩 돌아가면서 한 토픽을 존내 파온다. • PT를 작성해 와서 앞에서 발표한다. • 발표 이후에는 PT를 slideshare에 올릴 예정. • 남은 시간동안 구현을 하고, 다 못한 구현은 꼭 다음 시간까지 해온다. • Googling, 서로 머리 맞대고 고민하는 건 적극 권장(질문의 형식이 아닌 토의의 형식으로).
  • 6.
    Books • CLRS, Introductionto Algorithms • Levitin , Introduction to the Design & Analysis of Algorithms(학교 알고리즘 수업 교재) • Programming Pearls • 프로그래밍 대회에서 배우는 알고리즘 문제 해결 전략 • 컴퓨터 프로그램의 구조와 해석(알고리즘 책은 아니지만….) • …
  • 7.
    Topics • Sorting • Datastructures (e.g. stack, queue, linked list, hash table….) • Graphs • Dynamic programming • Greedy approach • Anyone more? Huffman coding, Backtracking, Branch and bound.
  • 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 • Whatis 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: arandom 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 “AsymptoticRep.” • 대강의 알고리즘의 성능을 나타내는 집합 • 인풋 양을 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 vsmerge sort Reference : Tosin Joseph, An experiment to determine practical efficiency of 
 insertion sort, merge sort and quick sort
  • 14.
    Insertion sort vsmerge 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 linkedlist Array Linked list 장점 Random access가 O(1) 위치를 알고 있다는 
 가정 하에 삽입/삭제가 O(1) 단점 삽입/삭제 시 O(n) Random access가 O(n)
  • 16.
    (과제)
 Implementation of linkedlist • 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++ 코 드는 안 ㄱㅊ • 되도록 의사코드를 보고 작성하고, 구성원들과의 토론은 완전 장려. 굳이 베끼지 말라능.