CS253 Sylabus & Progress

# CS253 Syllabus

1. Introduction

• Search:

2. Unorderd Maps (hashing) --- overlap with CS171

• Hash table: an O(1) implementation of Unordered Map:

• My old teaching material on Goodrich's HashMap implementation (for your eyes only, I am not discussing this in class, the code is too complicated for an average student): click here

3. Ordered maps: (entries that have an ordering property)

• An naive (O(n)) implementation of ordered maps using a sorted array: click here

• Skip lists: a faster (O(log(n)) (ordered) linked list data structure for ordered maps

4. Advanced implementation of Ordered Maps: Search Trees

• Review of binary search trees and its use to implement Ordered Maps: click here (A quick review of CS171 material)

• AVL trees: a guaranteed O(lg(n)) bin search tree

• Red-Black trees:

• Splay trees: a probabilistical O(lg(n)) bin search tree
• An average (amortization) performance analysis on Splay trees (O(lg(n)): click here

• 2,4-trees: a multi-way search tree

5. Advanced Sorting (discussed in CS171 - skip - won't be on exams)

 Merge sort Quick sort Heap sort If you need a refresher or want to study these sorting algorithms, please visit my CS171 syllabus page: click here

6. Text processing:

• Searching in texts: (pattern matching)

• Brute force approach:

• The Knuth-Morris-Pratt (KMP) method:

• The Boyer-Moore method:

• References:
• Original publication of the Boyer-Moore Algorithm: ``A Fast String Searching Algorithm'', R.S. Boyer and J. S. Moore., Communications of the ACM, 20(10), 1977, pp. 762-772. click here
• Boyer-Moore Algorithm for small size alphabets: ``String Search over Small Alphabets'', Matyas Sustik and J. S. Moore., click here

• Indexing texts: ("retrieve" -- tries)

• Compressing texts: (The Huffman (enthropy) encoding scheme)
• Huffman encoding -- using a heap-like tree to find shortest codes: click here

Huffman code lecture slides by Tom Przybylinski: click here (it has another example on constructing Huffman code)

• Text similarity testing:
• The LCS Problem description which is used as an intro to dynamic programming: click here

7. Recursive problem solving techniques / Dynamic Programming

• The Longest Common Subsequence (LCS) --- i.e., the DNA and "Text sequence" alignment problem:

• A linear space algorithm for the LCS problem:

• A linear space algorithm to find the length of the LCS: click here
• A linear space algorithm to find the LCS string - the Herschberg's algorithm: click here

• Reference: A linear space algorithm for computing maximal common subsequences by D. S. Hirschberg: click here

• Minimum edit distance (or smallest Levenshtein distance) between 2 strings:   click here

• Knapsack problems

8. Constrained linear optimization

• Real-number valued linear optimalization --- Simplex method:
• The Simplex method:
• Complexity of LP and running time of the Simplex Method: click here

• Integer-valued linear optimalization --- Integer programming:

9. Graph algorithms (discussed in CS171 - skip)

10. Shortest Path (Dijkstra's Algorithm): (discussed in CS171 - skip)

 Weighted graphs and path length: click here Finding shortest paths from one source -- Dijkstra's Algorithm: click here Proof of correctness: click here If you need a refresher or want to study these graph algorithms (e.g. Applying for the MS program at Emory), please click on the above links and study the material.

11. Minimum Spanning tree: (discussed in CS171 - skip)

12. Longest Path in a DAG (directed acyclic graph): (notes are not ready --- skip)

13. Network flow:

14. Matching in bi-partite graphs: The Marriage Problem

15. The Assignment Problem

16. The Transportation Problem
• Prelude to the Hungarian Algorithm for the Transportation problem: click here