University of Nevada Las Vegas
Howard R. Hughes College of Engineering
School of Computer Science
My Home Page

Computer Science 477/677
Design and Analysis of Algorithms
Spring 2004
Assignments

Revised May 17, 2004

Tuesday, January 20, 2004
I will assume that you are familiar with the material in Chapter 1 of your textbook.. You should be, if you've learned the material in the prerequisite courses. Yet, I will still spend some time today going over some of the more difficult topics in that Chapter.
Also today, we will discuss efficiency of algorithms. Read Sections 2.1 through 2.6 of your textbook, pages 57-67, before class.
Thursday, January 22, 2004
Today, we will continue our discussion of efficiency of algorithms, with an emphasis on timing analysis.
Tuesday, January 27, 2004
Turn in Assignment 1 at the beginning of class today.
Today we will discuss several of the topics in Chapter 4, pages 98-146 in your textbook.
The most difficult topic we will discuss is amortized complexity, which is in Section 4.6. I plan to spend most of the time discussing recurrences, introduced in Section 4.7.
Thursday, January 29, 2004
Today we will continue the discussion of recurrences.
Tuesday, February 3, 2004
Today we will continue the discussion of recurrences.
Thursday, February 5, 2004
Turn in Assignment 2 at the beginning of class today.
Today we will continue the discussion of recurrences. I will prove the master theorem today.
If time permits, we will discuss amortized analysis.
Tuesday, February 10, 2004
Today we will discuss sorting and searching.
Thursday, February 12, 2004
Today we will continue our discussion of sorting algorithms.
Tuesday, February 17, 2004
Today we will continue our discussion of sorting algorithms.
Thursday, February 19, 2004
Today we will try to finish our discussion of sorting algorithms.
Tuesday, February 24, 2004
First Examination today. Read the study guide.
Thursday, February 26, 2004
Today we will begin the discussion of priority queues and search structures.
Tuesday, March 2, 2004
I will hand back the exam today.
Today we will continue the discussion of priority queues and search structures.
Thursday, March 4, 2004
We will continue the discussion of priority queues and search structures.
Tuesday, March 9, 2004
Today I will introduce the rather large subject of graph algorithms, and data structures which implement graphs. Read Section 5.4 of your textbook.
Thursday, March 11, 2004
Turn in Assignment 3 at the beginning of class today.
Read Chapter 5 (pages 147-186) before March 16, except for Section 5.8.
Tuesday, March 16, 2004
Today we will continue the discussion of graphs and graph algorithms.
Thursday, March 18, 2004
Tuesday, March 23, 2004
Thursday, March 25, 2004
Turn in Assignment 4 at the beginning of class today.
We will continue our discussion of minimum path problems, including finishing the discussion of Floyd's algorithm.
Tuesday, March 30, 2004
Second Examination today. Read the study guide.
The exam will contain graph algorithm questions.
If a question that you see on one of these old exams is not related to anything we've covered in class so far this semester, then don't worry: it will not be on our March 30 exam.
Spring 1999: First Examination
Spring 1999: Second Examination
Spring 1999: Final Examination
Spring 2001: First Examination
Spring 2001: Second Examination
Spring 2001: Final Examination
Fall 2002: First Examination
Fall 2002: Second Examination
Fall 2002: Final Examination
Wednesday, March 31, 2004
The exams are graded now. The total possible was 145 points.
Thursday, April 1, 2004
I will hand back the graded examination today.
Tuesday, April 13, 2004

Today I will introduce the concept of dynamic programming. This is a technique whose name (I was told, so I am really not sure) was chosen for political reasons, and gives no clue as to what the method really is about. Read Chapter 8 of your textbook.

We have already done some dynamic programming. The linear time algorithm for finding the sublist of maximum sum that we did in class at the beginning of the semester uses dynamic programming. Dijkstra's algorithm is not exactly a form of dynamic programming, but uses similar concepts.

Many experienced programmers (I am absolutely stunned by the number) claim to have never heard of dynamic programming. But some of them use it anyway, as it is really a "natural" method that a clever programmer could come up with on his own. However, many never do.

It is difficult to overestimate the practical importance of dynamic programming. The need for it occurs constantly in real-life applications, and those who don't use it sometimes write programs whose time complexity is greater than necessary, by a truly staggering amount.
Thursday, April 15, 2004
I am in my office now, at Thu Apr 15 10:18:46 PDT 2004.
Today we will continue the discussion of dynamic programming.
Tuesday, April 20, 2004
Today we will continue our discussion of dynamic programming.
If you want to compute the product of a list of numbers (such as 3*5*22344*113402*12) does it matter in what order you do the multiplcation? (Assume that you are using the multiplication algorithm you learned in elementary school, whose time complexity for multiplying N by M is O(log(N)log(M)).
Thursday, April 22, 2004
Turn in Assignment 5 at the beginning of class today.
Today, I will discuss backtracking. We will give Graham's Scan as an example of a backtracking algorithm.
If time permits, I will introduce the concept of a greedy algorithm. Examples of greedy algorithms that we have already done include Prim's algorithm and Kruskal's algorithm. Another example that we will introduce will be Huffman's algorithm for optimal prefix coding.
Tuesday, April 27, 2004
Just a reminder: I now delete all email messages, without reading them, unless I know exactly who they are from. So, please use your real name and be sure to write "CSC 477" or "677" in the subject heading.
Today we will cover the subject of NP-completeness and NP-hardness. (This will be done differently and with less rigor than in 456/656.)

Everybody's heard of the concept, but few can define it. Can you?

I will introduce the concept of parallel algorithms today if we have time. How much time does it take to find the maximum of n numbers if n processors are working on the problem simultaneously?
Thursday, April 29, 2004
Turn in Assignment 6 at the beginning of class today.
Tuesday, May 4, 2004
Today and Thursday we will introduce some new material and clean up some previously overlooked topics.

A linear time algorithm for finding the median. (Using this algorithm to choose the cut value, quicksort runs in Theta(n log n) time. But you'd never use it that way.)

Dynamic data structures. The simplest example is a linked list with "move-to-front."
We have already discussed balancing schemes for binary search trees that guarantee that the height is always Theta(log n).
A more complex example, but with the same spirit as the move-to-front scheme for lists, is thesplay tree.
Thursday, May 6, 2004
Tuesday, May 11, 2004
Final Examination: 6:00-8:00
challenge problems are absolutely due today.
Read the study guide.
Monday, May 17, 2004
The final grades are now finished.