Syllabus for

Algorithms and Data Structures

COSC 311

(TTh 5:30-6:45, PH302)

Instructor: Matt Evett
Dept. Computer Science; room 512E Pray-Harrold
Tel: 734-487-1227; e-mail: evett@emunix.emich.edu;
https://emunix.emich.edu/~evett/DataStructures

Office Hours: TTh 1:00-5:00
You may drop by at times other than office hours, but in that case I cannot guarantee that I'll be able to see you.

Prerequisite: COSC 211, 221.

Textbook: Weiss, Algorithms, Data Structures and Problem Solving using Java 3nd Edition, Addison-Wesley, 2006.

Course Summary: Students successfully completing this course will understand the beneficial concepts of abstract data types (ADTs) including encapsulation, abstraction, security, polymorphism, inheritance, etc. Students will obtain proficiency in the use and implementation of the most common abstract data types, including trees, linked lists, queues, hash tables, stacks, etc. The course also covers some of the basic techniques for complexity and performance analysis of programs using ADTs.

The course is project oriented, with Java programming assignments spread throughout the semester. Students will learn advanced Java programming techniques including the use of inheritance, generic containers, and the Java Container Library.

Course Calendar:

Due dates for projects are underlined. Exam dates are in bold.
 
Date Text Projects due
9/4

 Ch 1-3 Java review (esp. exception handling, Javadoc and packages)

 
9/9, 11 Ch 3-4 Java review (esp. interfaces), design patterns, functors, generics  
9/16, 18 Ch 5 (analysis) HW#1
9/23, 25 Ch 6 (Collections API) HW#2
9/30, 10/2 Ch15 (Inner classes), Ch7 Proj#1
10/7, 9 Ch 7 (Recursion) Proj#2
10/14, 10/16 Ch 8 (Sorting)  
10/21, 10/23 Ch 16,17 (Stacks, queues, lists) Midterm Exam
10/28, 30 Ch 18 Trees Proj#3
11/4, 6 Ch 19 Search Trees Proj#4
11/11, 11/13 Ch 19  
11/18, 11/20 Ch 20 Hashing Proj#5
11/25, 11/27 Ch 21 Priority queues and heaps  
12/2, 12/4 Ch 12
12/9, 12/11 5:30-6:45 Final Exam Final Exam

 

Course Concepts:

  1. Principles of Programming
  2. Review of Java concepts
  3. Recursion (fundamentals)
  4. Data abstraction:  Abstract Data Types and Java classes
  5. Linked lists
  6.        Pointers and dynamic allocation
  7.        Basic operations:  insert and delete, traversal, recursive processing
  8.        Variations:  circular, dummy header, doubly-linked
  9. Stacks:  Stack ADT, various implementations, applications
  10. Queues:  Queue ADT, various implementations, applications
  11. Java Class Libraries
  1. Algorithm efficiency:  growth rates and big-O notation
  2. Sorting: comparison of various algorithms
  3.         Selection, bubble, insertion, merge, and quick sort.
  4. Searching: Sequential and Binary Search.
  5. Trees:  Binary Tree ADT, binary search tree ADT, implementation and applications
  6. Graph ADT, implementation, DFS, BFS.
  7. Table ADT
  8. Hashing
  9. Priority Queue ADT, heaps, heapsort

Grading Policy:

The final course grade will be a weighted average of the grades received in each of the following categories, as specified: Homeworks 5% of total grade, Programs 45%, Midterm exam 20%, Final exam 30%.

There will be five, unannounced quizzes, evenly distributed across the semester.  The quiz component of a student's overall grade for the course will be the average of that student's four highest quiz grades.

Tardiness Policy: Programming and other homework assignments will be due at the beginning of class. After that, assignments will be accepted through the start of the next scheduled class, but will suffer a full grade penalty. E.g., if a late programming assignment is worthy of an 'A', I will mark it a 'B'. Assignments more than one class late will not be accepted, and will receive a grade of 'F'.

Attendance Policy: We're all grown-ups, when and whether you attend class is up to you. However, missed assignments, and exams shall only be excused by a doctor's written note, verifying that the student was medically indisposed to attend class that day. The first missed quiz (for any reason) will be treated as the "lowest graded quiz", and therefore dropped from the averaging calculation. Any additional missed quizzes must be excused by a doctor's note.

Grading of Programs: Grading of programming assignments will reflect three factors, weighted as shown.

  1. (70%) Correctness -- does the program run correctly.
  2. (15%) Style -- does the code adhere to class documentation standards? Is the code indented properly? Are the variable names mneumonic? Etc. See the handout on acceptable programming style.
  3. (15%) Design -- is the program adequately decomposed (i.e., are the functions and procedures small enough to be comprehensible)? Are the class and structure definitions well chosen? Has the student made good use of existing classes and libraries. Make no mistake: if you hand in a program that works, but that does not adhere to class style standards and is poorly designed, that program can receive a poor grade. Conversely, if you hand in a program that is well documented, well designed, but still has a few bugs, that program can receive a passing grade.

Announcements and the Webcaucus:

Students should use the Blackboard system for this course regularly for announcements regarding programming assignments, readings, etc. Please feel free to submit your own questions and remarks to the Blackboard site, it is an integral part of the course.

Cheating policy:

Students are required to attend to the policy on academic irregularity outlined in the EMU student handbook. In addition, collaboration among students in solving programming and homework assignments is forbidden. If I receive programs or homework assignments that are substantially equivalent, or which are not the original work of the student submitting the material, I will not hesitate to punish all involved parties to the fullest extent, up to and including assignment of a failing grade for the course, and referral to the Office of Judicial Student Services for possible punitive action at the University level, which may include expulsion from the University. In addition, the University and the computer science department maintain policies regarding proper behavior on its computer systems. Failure to adhere to these policies can result in loss of computer privileges, and possible legal action.