一、課程說明 (Course Description)

This course introduces some classical and smart methods to store the data
so that we can answer questions about the data efficiently. As an example,
let us imagine that we have the exam scores of all students, and from
time to time different student would ask how many other students
get a higher score than him/her. In order to speed up the query, one
may store the scores in sorted order rather than in a random order.
[In fact, an even better scheme exists!]

Our focus will be on both the theoretical performance and the practical
implementation of the data structures.


二、指定用書 (Text Book)
1. Introduction to Algorithms, 3rd edition, MIT Press.
By T. Cormen, C. E. Leiserson, and R. L. Rivest

2. Fundamentals of Data Structures in C++, 2nd edition, Silicon Press.
By E. Horowitz, S. Sahni, and D. Mehta

三、參考書籍 (References)
1. Algorithms in C++, (or Algorithms in Java), by R. Sedgewick
2. The Art of Computer Programming, by D. E. Knuth

四、教學方式 (Teaching Method)
Lectures in English
Tutorials every Tuesday, 7:00--8:00pm (Voluntary Basis)

五、教學進度 (Syllabus)

Tentative topics to be covered:

1. Growth of Functions
2. Arrays
3. Heaps
4. Lists, Stacks, and Queues
5. Trees and Graphs
6. Searching Set Data
7. Sorting
8. Hashing

Please check last year's homepage [link] for a reference.

六、成績考核 (Evaluation)

4 Assignments (Written + Programming) 25%
2 Midterms (Written, 1 hour) 50%
Final Exam (Programming, 2 hours) 25%
-------------------------------------------------
Total 100%

Remark 1: Last year, approximately 70% of the students passed the course.
The average score is 75.

Remark 2: We normally will not make any score adjustment unless we
have made serious mistakes that affect the assessment.
Good news: It is possible that all students get A.
Bad news: It is possible that we are failing all students.