2024 Introduction to Algorithms and Data Structures

Font size  SML

Register update notification mail Add to favorite lecture list
Academic unit or major
Undergraduate major in Mathematical and Computing Science
Instructor(s)
Yasunaga Kenji  Yoshida Yusuke 
Class Format
Lecture / Exercise    (Face-to-face)
Media-enhanced courses
Day/Period(Room No.)
Tue5-8(W8E-101)  Fri5-6(W8E-101)  
Group
-
Course number
MCS.T213
Credits
3
Academic year
2024
Offered quarter
2Q
Syllabus updated
2024/3/18
Lecture notes updated
-
Language used
Japanese
Access Index

Course description and aims

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.

Student learning outcomes

(1) Able to explain algorithms based on modulo arithmetic, divide and conquer, dynamic programming, etc., and evaluate their computational complexity.
(2) Able to explain data structures such as heaps, binary search trees, etc., along with their implementation methods and evaluate the computational complexity of each operation.
(3) Implement the above algorithms and data structures using the C language.

Keywords

Modulo Arithmetic, Heaps, Binary Search Trees, Fast Fourier Transform, Graph Algorithms, Dynamic Programming

Competencies that will be developed

Specialist skills Intercultural skills Communication skills Critical thinking skills Practical and/or problem-solving skills

Class flow

Lectures are held on Tuesdays and Fridays 5-6 periods
Exercises are held on Tuesdays 7-8 periods at the computer laboratory

Course schedule/Required learning

  Course schedule Required learning
Class 1 Algorithm and Computational Complexity: Fibonacci Numbers, Computational Complexity, Big O Notation, Introduction to C Language Understand the computational complexity of algorithms and the big O notation.
Class 2 [Exercise 1]: Introduction to C Language, Fibonacci Numbers Become able to write basic C language code.
Class 3 Modular Arithmetic 1: Computational Complexity of Arithmetic Operations, Modular Arithmetic, Modular Exponentiation (Repeated Squaring), Euclidean Algorithm, Loop Invariants Understand modulo arithmetics and their computational complexity, the Euclidean algorithm, and loop invariants.
Class 4 Modular Arithmetic 2: Modular Division, Primality Testing (Fermat Test), Prime Number Generation, Operations on Dynamic Sets Understand modulo division and primality testing.
Class 5 [Exercise] Modular Arithmetic Become able to write modulo arithmetic algorithms in the C programming language.
Class 6 Data Structures 2: Arrays and Heaps, Binary Search, Linked Lists, Stacks, Queues Understand data structures such as heaps, binary search trees, and linked lists.
Class 7 Data Structures 3: Binary Search Trees, Balanced Search Trees, Hashing Understand binary search trees, balanced search trees, and hashing methods.
Class 8 [Exercise 3]: Binary Search Trees Become able to write binary search trees in the C programming language.
Class 9 Divide and Conquer 1: Karatsuba Algorithm, Master Theorem, Merge Sort, Lower Bounds on Sorting Algorithms Understand divide and conquer algorithms such as the Karatsuba algorithm and be able to evaluate their computational complexity.
Class 10 Divide and Conquer 2: Median Finding, Matrix Multiplication (Strassen's Algorithm) Understand algorithms such as median finding and matrix multiplication using divide and conquer techniques.
Class 11 [Exercise 4]: Binary Search, Divide and Conquer Implement algorithms such as binary search and divide and conquer in the C programming language.
Class 12 Fast Fourier Transform 1: Polynomial Coefficient Representation and Value Representation, Polynomial Evaluation and Interpolation, Vandermonde Matrix Understand polynomial coefficient representation, value representation, polynomial evaluation, and polynomial interpolation.
Class 13 Fast Fourier Transform 2: Fast Fourier Transform (FFT), Applications of FFT Understand the Fast Fourier Transform.
Class 14 [Exercise 5]: Fast Fourier Transform Implement the Fast Fourier Transform in the C programming language.
Class 15 Graph Algorithms 1: Graph Representation, Depth-First Search, Reachability, Connected Components Understand depth-first search, reachability, and connected components for graphs.
Class 16 Graph Algorithms 2: Breadth-First Search, Shortest Paths, Dijkstra's Algorithm Understand breadth-first search, shortest path, and Dijkstra's algorithm for graphs.
Class 17 [Exercise 6]: Graph Algorithms Implement graph algorithms in C language.
Class 18 Dynamic Programming: Shortest Paths, Longest Increasing Subsequence, Edit Distance Understand dynamic programming.
Class 19 Dynamic Programming: Knapsack Problem, Memoization, Matrix Chain Multiplication Understand dynamic programming for various problems.
Class 20 [Exercise 7]: Dynamic Programming Implement dynamic programming in C.
Class 21 Advanced Topics (e.g., Quantum Algorithms, Disjoint Set Data Structure) Understand advanced topics related to algorithms and data structures.

Out-of-Class Study Time (Preparation and Review)

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.

Textbook(s)

None required

Reference books, course materials, etc.

T. Cormen, et al., Introduction to Algorithms, 4th edition, MIT Press, 2022

Assessment criteria and methods

In-class quizzes: 30%
Homework-style reports: 30%
Programming exercises: 40%

Related courses

  • LAS.I121 : Computer Science I
  • LAS.I122 : Computer Science II
  • MCS.T204 : Introduction to Computer Science

Prerequisites (i.e., required knowledge, skills, courses, etc.)

This course is restricted to students in the Department of Mathematical and Computing Science due to the limited capacity of the computer laboratory. Prerequisites include completion of related courses or equivalent knowledge.

Page Top