Good program comes from appropriately using the "resources" on the computer. There are two types of key resources: computational units (CPU, FPU, etc.) and storage units (memory, disk, etc., along with channels and networks). Data Structures and Algorithms discuss how to use those two types of resources suitably and effectively. Traditionally, data structures aim at the use of storage units, while algorithms aim at the use of computational units. But the two aims are actually inseparable: succinct data structures require coupling with corresponding algorithms; efficient algorithms require coupling with corresponding data structures. The course, designed as a required course for NTU CSIE students in the freshman year, introduces basic data structures and their corresponding algorithms. We will move from the concrete side of implementing basic data structures to the abstract side of analyzing the complexity of storage and computation.

- Instructor:
Hsuan-Tien Lin (htlin AT csie DOT ntu DOT edu DOT tw)

office hour: after classes, R102; or by appointment, R314 - TAs (as shown below): dsa_ta AT csie DOT ntu DOT edu DOT tw
- TA office hours at CSIE Basement (Red Sofa):
- 陳佳佑: Monday 18:00--19:00 (Virtual, see forum for Google Meet Code)
- 吳崇維: Tuesday 16:20--17:20
- 李鈺昇: Wednesday 16:30--17:30
- 周侑廷: Thursday 15:00--16:00
- 楊皓丞: Friday 15:30--16:30

**TA hours on holidays are by default canceled, unless otherwise announced** - Time: Tuesdays 13:20--16:10 (will take one 10-min break in between, which means teaching 10-min more per week to make up for the shorter semester)
- Room: R102
- CEIBA: http://ceiba.ntu.edu.tw/1082dsa01
- Facebook Discussion Forum: https://www.facebook.com/groups/605789706938067
- Textbook: Data Structures and Algorithms in C++, 2nd Edition by Goodrich, Tamassia and Mount
- Course policy
- Signup form, with waiting list here
- Youtube playlist

- homework 6 announced on 05/20/2020
- homework 5 announced on 05/12/2020
- final project announced on 04/29/2020
- homework 4 announced on 04/28/2020
- homework 3 announced on 04/15/2020
- homework 2 announced on 03/25/2020
- homework 1 announced on 03/09/2020
- screencast link is here
- announcement about remote teaching

date | syllabus | plan | documents and reading assignments |

03/03 | class introduction, DSA introduction | ||

03/10 | C++ introduction (Chapter 1) and array (Section 3.1) | homework 1 announced | |

03/17 | array (Section 3.1) and linked list (Section 3.2) | ||

03/24 | linked list (Sections 3.2, 3.3, 3.4), recursion (Section 3.5), analysis tools (Chapter 4) | homework 1 due; homework 2 announced | |

03/31 | analysis tools (Chapter 4), stack (Section 5.1) | ||

04/07 | stack (Sections 5.1) and queue (Sections 5.2 and 5.3) | ||

04/14 | container/iterator (Chapter 6) | homework 2 due; homework 3 announced | |

04/21 | tree (Chapter 7) | final project announced | |

04/28 | heap (Chapter 8) | homework 4 announced | |

05/05 | binomial heap / hash table (Sections 9.1, 9.2, 9.3) | homework 3 due | |

05/12 | hash table (Section 9.2) | homework 5 announced | |

05/19 | skip list / binary search tree / AVL tree (Sections 9.4, 10.1, 10.2) | homework 4 due; homework 6 announced | |

05/26 | AVL tree / 2-3-4 tree / red-black tree (Sections 10.2, 10.4, 10.5) | ||

06/02 | (2, 3, 4)-tree / red-black tree (Sections 10.4, 10.5) | ||

06/09 | sorting (Sections 11.1, 11.2, 11.3) and summary | homework 5 due; homework 6 due | |

06/16 | no class and good luck with your other finals |
||

06/23 | summar vacation begins (really?) | final project due |