**Final Exam Review Topics**

The Final is 1 - 2:50 PM on Wednesday (12/18). Approximately, 30 % of the test will be

comprehensive (chapters 1 - 6, Appendix B) and the rest will be from chapters 7 - 9.

The test will have a closed-book part followed by an open-book part. The closed-book

part could contain questions from material in any chapter.

You might want to read all of the test questions (even the open-book questions) before

answering any questions. This way you will be able to manage your time better.

Comprehensive Part (chapters 1-6, Appendix B):

1) Algorithm Design: You should understand and be able to apply divide-and-conquer, dynamic

programming, greedy approach, backtracking, and branch-and-bound to simple problems.

2) Algorithm Analysis: You should be able to analysis recursive and non-recursive algorithms to determine their theta notation.

Chapter 7: Computational Complexity of Sorting (Mainly sections: 7.1, 7.6.1, 7.8, 7.9)

An understanding of the computational complexity argument for sorting using comparison

of elements. The results of the analysis.

Understanding of heap sort (don't waste your time memorizing the code, but understand how it

works and its analysis)

Understanding of Radix sort (don't waste your time memorizing the code, but understand how it

works and its analysis)

Chapter 8: Computational Complexity of Searching (Mainly sections: 8.1, 8.4)

An understanding of the worst-case, computational complexity argument for searching using

comparison of elements. The results of the analysis.

Understanding of the general concept of hashing.

Chapter 9. Introduction of the Theory of NP (Mainly sections: 9.1, 9.2, 9.3, 9.4.1, 9.4.2, 9.5.1)

Categories of Problems: P, intractable, and NP

Meaning of NP -- decision problems, polynomial-time nondeterministic algorithm

Meaning and usefulness of NP-Complete concept -- polynomial-time many-one reducible

Existence of NP-Complete problems -- CNF-Satisfiability and Cook's Thm. (Theory 9.2)

Using algorithm reduction/transformation to show a problem NP-Complete

Meaning of NP-hard problems

Handling NP-hard problems -- Backtracking & Branch-and-bound, poly-time algorithm for

a restricted subclass of the problem, approximation algorithms