James Allan

Fall 2013

CMPSCI 187 is the second course in programming for undergraduate computer science majors and deals with the design, use, and analysis of important data structures, implemented in Java.

The course is primarily intended for undergraduates in computer science and related majors such as mathematics or computer engineering. CMPSCI 121 (an introduction to Java programming) is a prerequisite. There is no formal mathematics prequisite but readiness for MATH 131 (Calculus I for scientists and engineers) is recommended.

This course satisfies the "Gen Ed" requirement as described in this General Education Statement.

For Fall 2013, CMPSCI 187 is using the University Moodle system. Most of the information on this page is repeated in the class' Moodle site. Your UMass userid and password will be required for access. Guest access is possible; the password will be announced in class.

If you are unable to register because you are not a declared
Computer Science major, you may request an override using the on-line
form found on the registration
advising page (it also includes information about what happens). You will receive an acknowledgement message that
indicates when you will be notified of a decision.
Override processing is handled by the School and not by
the professor, so contacting the professor will *not* increase your
chances of getting the override.

- Java review
- Abstraction, basic structures
- Complexity of algorithms (Big O)
- Stacks
- Recursion
- Queues
- ordered, unordered, and sorted lists
- circular and doubly-linked lists
- hash tables and maps (not in the textbook)
- binary search, linear searching, high probability ordering
- binary search trees
- heaps and graphs
- simple sorting: selection, bubble, insertion
- O(n log n) sorts: merge, quick, heap
- linear sorts
- Self balancing trees (not in the textbook)

The course will meet for two lectures a week: Tuesday and Thursday afternoons, 2:30-3:45pm, in Morrill Science Center II, room 131. That building is located at the lower right corner of C3 on this map.)

You will also attend one discussion section per week, meeting on Monday. There are 8 separate discussion sections (two in each of four times; there are effectively four sections), each led by the TAs. They meet Mondays from 10:10-11:00, 11:15-12:05, 1:25-2:15, or 2:30-3:20. Please choose a discussion section you can attend (and check SPIRE to ensure that is what you got). Because of space constraints you must go to the one you are assigned.

These discussion sections will meet in the CMPSCI computer lab in rooms 223 and 225 of the Lederle Tower (LGRT) -- room 225 is accessible only through room 223. Most discussions will have a written assignment which you will carry out in pairs, chosen by you at the start of each discussion with the requirement that you may not have the same partner twice in the term. Most assignments will involve use of the computers that are in the lab, with each pair using a single machine. Discussion attendance is required, so that missing a discussion will incur a grade penalty. It is intended that the different offerings of the discussion sections be as interchangeable as we can make them.

The textbook is the third edition of
*Object-Oriented Data Structures Using Java* by Dale, Joyce and
Weems (Jones & Bartlett, ISBN 978-1-4496-1354-9), henceforth
called "DJW". **The first and second editions of the book are
substantially different and will not work as substitutes.** Lectures
will follow the content of the book fairly closely (especially after
the first few weeks), though some topics are re-ordered.

The DJW book is not a Java language manual. There are a variety of
ways to get information about the Java language -- two useful ones are the
official API's for the language and the very inexpensive book *Java
Precisely* by Peter Sestoft. *Java Precisely* is intended more
as a reference for people who already know the language, but it has
both all the details you aren't likely to ever memorize and a very
clear definition of exactly what the language is and what it
does.

Your grade in this class will be based upon the following:

- There will be two evening mid-term exams and a final exam. All total, the exams will comprise at least half of your course grade.
- This course includes substantial programming in Java. You will code and turn in 7-8 substantial programming assignments over the course of the semester. The assignments will comprise about a quarter of your course grade.
- There will be weekly on-line homeworks, some of which may require moderate programming.
- The weekly discussion sections are graded based on your attendance and success at the assignment.
- A small portion of your grade will come from i>clicker2 in-class responses.

You may discuss the ideas behind assignments with others. You may ask for help understanding class and Java concepts. You may study with friends. However...

The Java code that you submit must be your own. It may not be copied from the web, from another student in the class, or from anyone else. If you use a solution from the textbook or from class, you are expected to acknowledge the source of your code in a comment (for example, "// The following way of solving this problem is on page 215 of the textbook").

Your effort on exams must be your own.

Your homework submissions must be your own work and not in collaboration with anyone.

Your discussion section work will usually be done in pairs, with the pairings changing each week.