Up Next

General Information


Dave Musser, 276-8660, musser[at]cs.rpi.edu
Office Hours: Lally 313, Tuesday & Wednesday 2:30-4 pm or by appointment

Catalog description

Study of the generic programming approach to design and systematic classification of software components. Techniques for achieving correctness, efficiency, and generality of algorithms, data structures, and memory management. Methods of structuring a library of generic software components for maximum usability are practiced in a significant design and implementation project. Prerequisite: CSCI-2300 or equivalent. 3 credit hours


CSCI-2300 Data Structures and Algorithms
From the Rensselaer Catalog: Data structures and algorithms, and the mathematical techniques necessary to design and analyze them. Basic data structures: lists, associative structures, trees. Mathematical techniques for designing algorithms and analyzing worst-case and expected-case algorithm efficiency. Advanced data structures: balanced trees, tries, heaps, priority queues, graphs. Searching, sorting. Algorithm design techniques: dynamic programming, greedy algorithms, divide-and-conquer, backtracking. Example graph, string, geometric, and numeric algorithms. Prerequisites: CSCI-1200 and MATH-1010. Fall and spring terms annually. 4 credit hours.
The main background needed is programming experience and familiarity with data structures and algorithms, including basic efficiency analysis techniques. Programming will be done primarily in C++ and G (a research language designed specifically for generic programming). The more advanced C++ and G language and library features will be thoroughly discussed and illustrated with example programs.

What it's not

This course is not on, but does draw ideas and goals from
  • mathematics

  • software engineering

  • analysis of algorithms

  • programming language semantics

  • object-oriented programming

  • functional and imperative programming

Homework, projects, exams, and grading

There will be in-class assignments, homework assignments, a programming project, and two exams. Only a few of the in-class and homework assignments will be graded; they will count about 10% of the course grade.

The programming project (which will be assigned in several parts) will count about 40% of the course grade.

The two exams will each count about 25% of the course grade.


Except in cases in which collaboration is specifically permitted, you must work on assignments individually. Particularly for some parts of the project, collaboration may be permitted or required, but in those cases the instructions given with the assignment will say so.

On the exams, collaboration is never permitted; all work must be your own.

I don't expect any incidents of academic dishonesty in this course, but any that do occur will be dealt with according the policies stated in the Rensselaer Handbook.

Restricted access to some files

Some files, including most of the homework and exam solutions, have restricted access. These are the files that reside in the codebase or exercises directories in the course subversion repository, which requires you to log in with your CSLab username and password. You are permitted to download any of these files for your own use, and you may share them with others in the Rensselaer community, subject to restrictions against collaboration as specified in homework or project assignments. Such files should not be made available outside outside the Rensselaer community; in particular, don't repost them on any public Web page. Access to some files is restricted because textbook authors and other course instructors generally do not want exercise or problem solutions widely published, for obvious reasons.

Up Next