Winter Quarter, 2004

Intermediate Data Structures and Algorithms


  • Solution homework 3 posted
  • Quiz 2/A and quiz 2/B (with solutions) is now posted
  • Project 3 has been posted
  • Implementation of Project 2 posted
  • Homework 3 has been posted
  • Solution homework 2 posted
  • Since Monday Feb 16th is an holiday, Tuesday Feb 17th labs are open to everyone (no attendance will be taken, no in-lab exercise will be done)
  • Quiz 1/A and quiz 1/B (with solutions) is now posted
  • Project 2 has been posted
  • Yannis' solution of Project 1 has been posted
  • Homework 2 has been posted
  • Solution homework 1 posted
  • Quiz 1 will be on February 5th, in class.
  • Project 1 has been posted
  • Since Monday Jan 19th is an holiday, Tuesday Jan 20th labs are open to everyone (no attendance will be taken, no in-lab exercise will be done)
  • Homework 1 has been posted

  • Lecture Schedule   Lab Session Topics  Email list   Turnin   Grade mapping  Previous offerings  Resources   Tutorials   Animations


    CS 141 introduces what many say is the core of Computer Science: data structures like graphs, and problem solving techniques. This material is essential in almost all of our upper-division courses.

    Catalog description: CS 141. Intermediate Data Structures and Algorithms. (4) Lecture, three hours; laboratory, three hours. Prerequisite(s): CS 014 with a grade of "C-" or better; MATH 009C or MATH 09HC; MATH 112; proficiency in C++. Explores basic algorithm analysis using asymptotic notations, summation and recurrence relations, and algorithms and data structures for discrete structures including trees, strings, and graphs. Also covers general algorithm design techniques including "divide-and-conquer," the greedy method, and dynamic programming. Homework and programming assignments integrate knowledge of data structures, algorithms, and programming.
    UCR course schedule, UCR course catalog. Note: Students receiving less than a C- in the CS 14 prerequisite will be dropped automatically a few weeks into the quarter, as the course relies heavily on basic knowledge of and skills in data structures, discrete mathematics, and programming.

    Basic information

    Syllabus: Download the PDF file.

    Instructor: Stefano Lonardi (
    Office hours: Tue and Fri 5:10-6pm. Office: Surge Bldg. 320.

    Teaching Assistants and office hours:
  • Lan Liu (, Office hours: Tue 2:00-3:00pm
  • Serdar Bozdag (, Office hours: Mon 10:00-11:00am
  • Drougas Ioannis (, Office hours: Thu 2:30-3:30pm
  • Haifeng Li (, Office hours: Mon 5:00-6:00pm
  • Office hours are held in Surge Bldg. 282.

  • Lectures:
  • (1) TR 3:40-5:00, SPR 1340

  • Labs:
  • Sec 21, Mon, 8:10am-11am, Surge 170, Cancelled
  • Sec 22, Tue, 8:10am-11am, Surge 171, Haifeng
  • Sec 23, Mon, 2:10pm-5pm, Surge 170, Yannis
  • Sec 24, Mon, 11:10am-2pm, Surge 170, Serdar
  • Sec 25, Tue, 11:10am-2pm, Surge 170, Lan

  • Text Book:
  • Algorithm Design (Foundations, Analysis, and Internet Examples) by Michael T. Goodrich and Roberto Tamassia, Wiley.

  • References:
  • Data Structures and Algorithms in C++ by Michael T. Goodrich, Roberto Tamassia, and David M. Mount, Wiley.
  • Introduction to Algorithms (2nd Edition) by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Cliff Stein, MIT Press.

  • Approximate Time Requirements: This is a four-unit CS course. As such, you should expect to spend the following approximate amount of time: 3 hours/week in lecture
    3 hours/week in lab
    6 to 10 hours/week doing individual study (readings, homeworks, programming assignments, preparation for lectures, etc).
    Please don't underestimate the time you will need to spend on this course. These are real time amounts spent by average successful past students. Computer Science and Engineering are challenging disciplines requiring extensive time to master.


    See the syllabus. Read the book before lecture! Reading ahead is one of the most effective ways of doing better in class -- you'll be amazed how much more comprehensible and useful the lectures will be. The schedule is subject to change as the quarter progresses.

    Lecture Notes:

  • Course Overview [PDF format 2 slides/page]
  • Algorithm Analysis [PDF format 2 slides/page]
  • Greedy, Divide&Conquer, Dynamic Programming [PDF format 2 slides/page]
  • Graphs [PDF format 2 slides/page]
  • Weighted Graphs [PDF format 2 slides/page]
  • String Matching [PDF format 2 slides/page]

  • Tentative list of topics
  • week 1: Course overview, analysis of algorithms
  • week 2: Discrete math for algorithm analysis
  • week 3: Greedy approach for algorithm design
  • week 4: Divide and conquer, dynamic programming
  • week 5: Graphs, and their representation
  • week 6: Graph traversal, connectivity
  • week 7: Minimum cost spanning tree, single-source shortest path
  • week 8: All-pais shortest path
  • week 9: String matching, KMP
  • week 10: NP completeness, review
  • Actual list of topics

    Do not put off reading the assignments or you will risk falling behind. Reading ahead is one of the most effective ways of doing better in class -- you'll be amazed how much more comprehensible and useful the lectures will be.





    General course features and policies

    Lab guidelines

    Electronic assignment turn-in

    Anonymously report suspected cheating

    Grade mapping

    The following mapping shows how your overall numerical scores will be translated into letter grades at the end of the quarter:

    Course email list

    Course mailing list (send mail now or access the archive): Be sure to sign up to receive important announcements, which will be madeonlythrough the course email list. You must use your CS or EE account, or else some other UCR account, so be sure to learn how to read those accounts or at least automatically forward messages to your personal email address (just create in your home directory a file named ".forward" containing your personal email address).

    Previous course offerings' web pages

    Additional Resources


    Algorithm Animations