一、課程說明 (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

三、參考書籍 (References)
1. Algorithms in C++, (or Algorithms in Java), by R. Sedgewick
2. The Art of Computer Programming, by D. E. Knuth
2. Fundamentals of Data Structures in C++, by E. Horowitz, S. Sahni,
and D. Mehta

四、教學方式 (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. Sorting
5. Lists, Stacks, and Queues
6. Trees and Graphs
7. Searching Set Data
8. Hashing

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

六、成績考核 (Evaluation)

6 Assignments (Written or Programming) 45%
3 Exams (Written, 1 hour) 45%
1 Project (Programming) 10%
-------------------------------------------------
Total 100%

Remark 1: In previous years, approximately 80% of the students passed
the course. The average score is between 75 and 80.

Remark 2: We normally will not make any score adjustment unless we
have made serious mistakes that affect the assessment.
Please think twice before joining our class.

Good news: It is possible that all students get A.
Bad news: It is possible that we are failing all students.