A procedure for solving a given problem is called "Algorithm". Efficient algorithms often require well-designed data structure. In this course, we deal with typical algorithms and data structures, their computational complexity and their implementation by C programming language.
Since algorithm is a concrete procedure for solving problems, algorithm is foundation of all information processing, and used everywhere in real world. Learning algorithm is quite important, and could affects our thoughts.
(1) Ability of explaining algorithms based on binary search, divide-and-conquer, dynamic programming, and evaluating their computational complexity.
(2) Ability of explaining data structures, e.g., heap, binary search tree, etc, and their functionality, and evaluating their computational complexity.
(3) Ability of implementing algorithms and data structures by using C programming language.
(4) Ability of designing efficient algorithms for given problem.
binary search, divide-and-conquer, dynamic programming, heap, binary search tree, graph algorithms
✔ Specialist skills | Intercultural skills | Communication skills | Critical thinking skills | ✔ Practical and/or problem-solving skills |
This course consists of lectures and related exercises (approximately 7 times) by C programming language.
Course schedule | Required learning | |
---|---|---|
Class 1 | Algorithm and recurrence formula: Euclidean algorithm, binary search | Ability of explaining Euclidean algorithm and binary search. |
Class 2 | Introduction to C programming language (Exercise): Euclidean algorithm, binary search | Ability of writing basic program codes in C programming language. Ability of implementing Euclidean algorithm and binary search by C programming language. |
Class 3 | Order of computational complexity: Euclidean algorithm and binary search | Ability of evaluating computational complexity of Euclidean algorithm and binary search. Ability of using big-O notation, etc. |
Class 4 | Divide-and-conquer: selection sort, insertion sort, merge sort, computational complexity | Ability of explaining sorting algorithms including selection sort, insertion sort, merge sort, and evaluating their computational complexity. |
Class 5 | Divide-and-conquer (Exercise): quickselect, quicksort | Ability of implementing quickselect and quicksort by using C programming language. |
Class 6 | Divide-and-conquer: Set cover problem, fast zeta transform | Ability of explaining high-level divide-and-conquer algorithms. Ability of explaining efficient algorithm solving set cover problem using fast zeta transform. |
Class 7 | Dynamic programming: Fibonacci number, partition number | Ability of explaining dynamic programming algorithm for partition number. |
Class 8 | Dynamic programming: Memoization, bottom-up method, computational complexity | Ability of implementing dynamic programming algorithm for partition number using memoization and bottom-up method. |
Class 9 | Dynamic programming: Knapsack problem, longest increasing subsequence | Ability of explaining typical dynamic programming algorithms such as knapsack problem, longest increasing subsequence. |
Class 10 | Dynamic programming (Exercise): Knapsack problem | Ability of implementing dynamic programming algorithm for knapsack problem using C programming language. |
Class 11 | Dynamic programming (Exercise): Knapsack problem | Ability of implementing dynamic programming algorithm for knapsack problem using C programming language. |
Class 12 | Data structure: Heap, heap sort | Ability of explaining heap and its functionality. |
Class 13 | Data structure (Exercise): Heap, heap sort | Ability of implementing heap and heap sort by using C programming language. |
Class 14 | Data structure: Balanced binary search tree | Ability of explaining balanced binary search tree and its functionality. |
Class 15 | Data structure (Exercise): Malloc, pointer, balanced binary tree | Ability of implementing balanced binary tree using malloc and pointer. |
Class 16 | Data structure (Exercise): Malloc, pointer, balanced binary tree | Ability of implementing balanced binary tree using malloc and pointer. |
Class 17 | Graph algorithms: Breadth-first search, depth-first, search | Ability of explaining Breadth-first search, depth-first search and Dijkstra algorithm. |
Class 18 | High-level algorithm: Convolution problem, discrete Fourier transform, fast Fourier transform. | Ability of explaining relationship between convolution problem and discrete Fourier transform. Ability of explaining fast Fourier transform. |
Class 19 | High-level algorithm: Fast Fourier transform. | Ability of implementing fast Fourier transform by C programming language. |
Class 20 | Randomized algorithm: Miller-Rabin primality test, etc | Ability of explaining randomized algorithm such as Miller-Rabin primality test. |
Class 21 | Quantum algorithm: Grover algorithm, Shor algorithm | Ability of explaining abstract of quantum mechanics, quantum computation, Grover's algorithm and Shor's algorithm. |
To enhance effective learning, students are encouraged to spend a certain length of time outside of class on preparation and review (including for assignments), as specified by the Tokyo Institute of Technology Rules on Undergraduate Learning (東京工業大学学修規程) and the Tokyo Institute of Technology Rules on Graduate Learning (東京工業大学大学院学修規程), for each class.
They should do so by referring to textbooks and other course material.
All materials used in this course are provided on web page which will be informed in a class.
T. Cormen, et al., Introduction to Algorithms, 3rd edition ,MIT Press, 2013, ISBN-13 978-0262033848.
Programming exercise (approximately 7 times, 70%)
Final exam (30%)
No prerequisities are necessary, but enrollment in the related courses is desirable.
Ryuhei Mori, mori[at]c.titech.ac.jp
Contact by email in advance for an appointment.