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:
-
Principles of Programming
- Review of Java concepts
-
Recursion (fundamentals)
- Data abstraction: Abstract Data Types and Java classes
-
Linked lists
-
Pointers and dynamic allocation
-
Basic operations: insert and
delete, traversal, recursive processing
-
Variations: circular, dummy
header, doubly-linked
-
Stacks: Stack ADT, various implementations, applications
-
Queues: Queue ADT, various implementations, applications
- Java Class Libraries
-
Class relationships and inheritance
-
Virtual functions
-
Template classes
-
Operator overloading
-
Algorithm efficiency: growth rates and big-O notation
-
Sorting: comparison of various algorithms
-
Selection, bubble, insertion,
merge, and quick sort.
-
Searching: Sequential and Binary Search.
-
Trees: Binary Tree ADT, binary search tree ADT, implementation and
applications
-
Graph ADT, implementation, DFS, BFS.
-
Table ADT
-
Hashing
-
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.
-
(70%) Correctness -- does the program run correctly.
-
(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.
-
(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.