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 |
Lectures are held on Tuesdays and Fridays 5-6 periods
Exercises are held on Tuesdays 7-8 periods at the computer laboratory
On each exercise day, students will be given exercise to implement algorithms by C language and a report assignment.
Course schedule | Required learning | |
---|---|---|
Class 1 | Algorithm and recurrence formula: Euclidean algorithm. | The ability to explain the Euclidean algorithm. |
Class 2 | [Exercise] Introduction to C programming language: Euclidean algorithm, number theoretic algorithms. | Ability to write basic program codes in C programming language. Ability to implement number theoretic algorithms in C programming language. |
Class 3 | Order of computational complexity: binary search | Ability to evaluate computational complexity of binary search. Ability to use big-O notation, etc. |
Class 4 | Divide-and-conquer 1: selection sort, insertion sort, computational complexity | Ability to explain sorting algorithms including selection sort, and insertion sort. |
Class 5 | [Exercise] Binary search | Ability to implement binary search algorithms |
Class 6 | Divide-and-conquer 2: merge sort | Ability to explain merge sort and evaluate the complexity of sorting algorithms. |
Class 7 | Dynamic programming 1: Fibonacci number, partition number | Ability to explain dynamic programming algorithms for Fibonacci numbers and partition numbers. |
Class 8 | (Exercise3) Divide-and-conquer: quicksort | Ability of implementing quickselect and quicksort by using C programming language. |
Class 9 | Dynamic programming 2: knapsack problem | Ability to explain typical dynamic programming algorithms such as knapsack problem, and longest increasing subsequence. |
Class 10 | Dynamic programming 3: edit distance | Ability to explain dynamic programming algorithms for edit distance. |
Class 11 | [Exercise4 ]Dynamic programming | Ability to implement dynamic programming algorithms for using C programming language. |
Class 12 | Data structure 1: list, queue, stack | Ability to explain basic data structures including list, queue, and stack |
Class 13 | Data structure 2: balanced binary search tree | Ability to explain balanced binary search tree |
Class 14 | [Exercise5] Data structure: malloc, pointer, balanced binary search tree | Ability to implement a balanced binary search tree and its functionality. |
Class 15 | Graph algorithms: breadth-first search, depth-first search | Ability to explain breadth-first search, depth-first search, and Dijkstra algorithm |
Class 16 | Data structure 3: heap, heap sort | Ability to explain heap and heap sort |
Class 17 | [Exercise6] Data structure: heap, heap sort | Ability to implement heap and heap sort by using C programming language. |
Class 18 | Divide-and-conquer 3: matrix multiplication, polynomial multiplication | Ability to explain Karatsuba and Strassen algorithm. |
Class 19 | Divide-and-conquer 4: convolution problem, discrete Fourier transform, fast Fourier transform. | Ability to explain the relationship between convolution problem and discrete Fourier transform. Ability to explain fast Fourier transform. |
Class 20 | [Exercise] Fast Fourier transform | Ability to implement fast Fourier transform by C programming language. |
Class 21 | Randomized algorithm: universal hash function, hash table | Ability to explain universal hash function and hash table. |
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.
None required
T. Cormen, et al., Introduction to Algorithms, 3rd edition ,MIT Press, 2013, ISBN-13 978-0262033848.
Programming assignments and reports
Only the Department of Mathematical and Computing Science students may take this course due to capacity of the computer laboratoly.
Students must have completed related courses or have equivalent knowledge.