**COURSE TIMES:**

- Section U01C: Mon, Wed, Fri 10:45AM - 11:50 AM in ECS-135.

**PREREQUISITES:**
Discrete Math and COP-3337.
You
**must**
drop the course
if you haven't gotten a C or better in an applicable computer course above.
You might
want to drop if you haven't had Discrete Math.
**WARNING: If your COP-3337 prerequisite is dated from prior to Summer 2012,
you may well have forgotten everything you learned. You should seriously
consider reviewing that material.
**

**INSTRUCTOR:**
Prof. Mark Allen Weiss

**TEACHING ASSISTANTS:**

Mahbubur Rahman (mrahm025 AT FIU DOT EDU) and Kianoosh Gholami (kghol002 AT FIU DOT EDU), both in ECS-232A.

**OFFICE HOURS:**
You are free to stop by my office ECS-353 any time you can find me.
My office hours represent a time when I am (more or less)
guaranteed to be available.
This semester this is
Monday, Wednesday, and Friday 9:30 AM - 10:30 AM.
My office phone is FIU-2036.
In addition, Kianoosh will hold office hours T/R 2:00-3:30PM and
Mahbubur will hold office hours W/F 3:00-4:30PM, all in ECS-232B.

On other days, and after hours, you are better off trying email: . You will generally get an answer within 10 minutes of my reading the message.

I have three standing rules:

- I will not debug programs. Debugging is part of the assignment. If you are very confused about some compiler error messages, you can ask, but read the error message carefully and ask as a last resort, not a first. Also, check the announcements page, since I occasionally post answers to common problems reported to me.
- If you miss class, get the class notes from a classmate or check the lectures page. Do not ask me what you missed.
- I am very unsympathetic toward questions that are asked on the program due date. You should be done by then.

**LANGUAGES AND PLATFORMS:**
This course will be conducted in Java.
I assume that you are reasonably well-versed in Java,
having had Programming II in Java.
**
If you have not recently programmed in Java, you will
probably have a very difficult time in this course.**
You must use a Java 8 compiler.

**TEXT:**
The course text
is my book
*Data Structures and Algorithm Analysis in Java, Third Edition*.
There are no other texts required or recommended.
This edition is significantly revised from the earlier editions and I do not recommend
using the earlier editions.
Please also note that this is a very different book than used in previous semesters.
Note this book uses Java 7; where needed Java 8 features will be discussed in class.

**COURSE GRADING:**
Grades will be based on five programs,
quizzes based on the programs, one midterm exam
(graded prior to the drop date),
and a final
examination. The midterm is worth 1.5 programs, the final is
worth 1.5 programs,
and each quiz is worth the same as a program.
I will drop
both the lowest and highest program
and the lowest and highest quiz.
So the final average will be based on 3 programs,
3 quizzes, and 2 exams, and programs, quizzes, and exams are each
worth one-third of your grade.
If you miss a program or quiz, that will be the one that is dropped.
The scale is as follows: A is 90% or higher, B is 80% or higher, and
C is 70% or higher.
+ or - is done at 3.33% intervals, so A- is 86.67% or higher,
B+ is 83.33%, etc.
C- is 66.67% or higher.
I reserve the right to change the method of assigning grades,
including changing the number of assignments or exams,
but
**in no case will a curve be applied**.

**PROGRAMS:**
Programs are due at the start of class and must be submitted via moodle.
Your submission must be a ZIP file (please use zip, not rar format), named as
y_xxxxxxx.zip (where y is the assignment # (ranging from 1-6)
and xxxxxxx is your
seven digit panther IDi); the file should include
source code and
sample output.
I will generally specify what the data is.
Your work **must be your own**, and you must attest to this
in a comment that begins each program.
See also FIU's
Code of Academic Integrity.
**Let me make myself perfectly clear: I will not tolerate cheating.
Your work needs to be your own. It cannot be joint work with another
student in the class. It cannot be joint work with another student
who previously took the class. You cannot pay someone
to do the programs for you. You cannot have someone do the programs
for you for free. You cannot submit code that is based on code submitted in earlier semesters
by others.
I do not want to be getting any more
emails from professional programmers telling me
that students are posting assignments and asking for code.
I want some honesty, and if I don't get it, there will be
significant consequences.
You can assume that programs will be run through software that detects
inappropriate collaborations.
**

The assignments and if appropriate, input data, will be placed here.

**COURSE OUTCOMES**

- Be familiar with basic techniques of algorithm analysis
- Be familiar with writing recursive algorithms
- Master the implementation of linked data structures such as linked lists and binary trees
- Be familiar with advanced data structures such as balanced search trees, hash tables, priority queues and the disjoint set union/find data structure
- Be familiar with several sub-quadratic sorting algorithms including quicksort, mergesort and heapsort
- Be familiar with some graph algorithms such as shortest path and minimum spanning tree
- Master the standard data structure library of a major programming language (e.g.
`java.util`in Java 1.2) - Master analyzing problems and writing program solutions to problems using the above techniques

**COURSE OUTLINE (OPTIMISTIC):**

- Algorithms - What they are and what are their time and space complexities. Big-Oh notation. Computation of complexities of an algorithm.
- Lists, Stacks, Queues, Trees, binary search trees, AVL trees, B-trees.
- Hash Tables, Binary heaps, heapsort,
- Sorting Algorithms: Insertion sort, Shellsort, mergesort, quicksort, bucket sort. Lower bounds for sorting.
- Disjoint set UNION-FIND algorithm, Graph Algorithms: Minimum spanning tree, shortest path algorithms.