一、課程說明(Course Description)



Computer algorithms specify unambiguous steps to solve specific problems. The efficiency of these

algorithms can make huge impacts on the execution time or the memory requirement for solving large size

problems. In this course, how to analyze an algorithm is first introduced. Then some common approaches to

develop algorithms are described. That includes divide and conquer, greedy algorithms, dynamic

programming, branch and bound, etc. Finally, some known hard problems that would take very long time to

find the best solution are presented. If a problem falls into this category, known as NP-complete problems,

then one should not try to find the exact solution, instead, a sub-optimal solution should be sought for.

Extensive research on writing effective algorithms to solve practical problems have been carried out in the

20'th century, this course covers some of the basic ones to enable students to develop algorithmic skills

such that they can solve practical problems in the future.



二、指定用書(Text Books)



E. Horowitz, S. Sahni, and S. Rajasekeran, Computer Algorithms, 2nd Edition, Silicon Press, 2008.



三、參考書籍(References)



T.H. Cormen, C.E. Leiserson, R.L. Rivest, and C. Stein, Introduction to Algorithms, 3rd Edition, The MIT Press,

2009.



四、教學方式(Teaching Method)



Lecture and discussion.



五、教學進度(Syllabus)



1. Introduction

2. Program performance analysis

3. Divide and conquer

4. The greedy method

5. Dynamic programming

6. Traversal and search

7. Backtracking

8. Branch and bound

9. Lower bound theory

10. NP-hard and NP-complete problems



六、成績考核(Evaluation)



Homework: 50%

Midterm exam and quizzes : 30%

Final exam: 20%



七、可連結之網頁位址



To be provided later.