University of Utah School of Computing
CS 2420-EAE:
Introduction to Computer Science II
INSTRUCTOR:    Adam Bargteil
Office hours: by appointment, WEB 2666
TEACHING ASSISTANT:    Taylor Stapleton (Email: taylorstapleton@gmail.com)
Office hours: Tue/Wed/Thur 3:30-6:30, WEB L130
WEB PAGE: http://www.eng.utah.edu/~cs2420-eae/
HELP: teach-cs2420-eae at list dot eng dot utah dot edu
LECTURE: M/W 1:25-2:45, WEB 112
LAB:    F 3:05-3:55, MEB 3225
UNITS: 4
Midterm Exam:Wednesday, February 27
Final Exam: Monday, April 29, 1-3pm
Class Roster

COURSE OVERVIEW:
The second course required for students intending to major in computer science and computer engineering. Introduction to the problem of engineering computational efficiency into programs. Classical algorithms (including sorting, searching, and graph traversal) and data structures (including stacks, queues, linked lists, trees, hash tables, and graphs). Analysis of program space and time requirements. Extensive programming exercises that require the application of elementary techniques from software engineering.

TOPICS TO BE COVERED:

  • Algorithms
  • Algorithm Analysis
  • Data Structures
  • Computer Graphics and Animation
  • Programming in Java
PREREQUISITES:
CS 1410, permission of instructor
TEXT:
Recommended:
Data Structures & Problem Solving Using Java, 4th Edition
by Mark Allen Weiss
ISBN: 0321541405

Alternatives:
Data Abstraction & Problem Solving with Java (Walls & Mirrors) by Janet J. Prichard and Frank M. Carrano
Data Structures: Abstraction and Design Using Java by Koffman and WolfGang
Data Structures & Algorithms in Java by Michael T. Goodrich and Roberto Tamassia

Java Reference:
Head First Java
by Kathy Siearra and Bert Bates

OpenGL Quick Reference Guide
METHOD OF EVALUATION:
Assignments (Programming & Written)      50%
Quizzes 5%
Midterm Exam 20%
Final Exam 25%

Late Policy:
Assignments will generally be due Fridays at 6am. Any written portion should be handed in during the Friday lab. Late assignments will be penalized as follows:
Up to 24 hours late: 10%
Up to 48 hours late: 30%
Up to 72 hours late: 50%
More than 72 hours late: 100%


Cheating Policy:
The penalty for cheating is an Failing Grade for the course.

What is not considered cheating
  • Working with (one) partner to complete assignments
  • Talking with other students about assignments
  • Studying for exams with other students
  • Getting help on assignments from the TA or Professor
  • Reading about a topic on the internet
  • Teaching a skill, i.e. sharing some feature of eclipse or how to make a nicer webpage.
What is considered cheating
  • Sharing code (looking at code on someone's screen, emailing a code snippet, etc) with anyone other than your partner (both the sharer and the sharee are cheating).
  • "Giving away the answer" to written homework assignments
  • Downloading code from the internet and submitting it (or something close to it) as your own.
  • Allowing someone else (e.g. a friend who has taken this course) to do your assignments

Please also see the School of Computing Policy Statement on Academic Misconduct.
CLASS SCHEDULE (subject to change)

Week #1:  January 7 - January 11
Reading:Chapters 1, 2, 3 (Java), and 17 (Linked List)
Monday lecture: Introduction and Overview, Java
Wednesday lecture: Linked Lists
Friday lab: Java Programming in Eclipse (the LinkedList and ListIterator classes, my Eclipse Preferences, another set of preferences)
Week #2:  January 14 - January 18
Reading:Chapeter 5, 6.2, 7
Monday lecture: Iterators, Big-O
Wednesday lecture: Recursion
Friday lab: Working with images (ImageManipulation.java)
Week #3:  January 21 - January 25
Reading:Chapter 7
Monday lecture: Martin Luther King, Jr. Day --- no class
Wednesday lecture: Dynamic Programming
Friday lab: Dynamic Programming (DynamicProgramming.java)
Week #4:  January 28 - February 1
Reading:Chapter 7, 8
Monday lecture: Backtracking
Wednesday lecture: Sorting
Friday lab: Tic-tac-toe (TicTacToe.java)
Week #5:  February 4 - February 8
Reading:Chapter 8, 16
Monday lecture: Sorting
Wednesday lecture: Sorting
Friday lab: Timing Code (Timer.java)
Week #6:  February 11 - February 15
Reading:Chapter 18
Monday lecture: Sorting, Stacks and Queues
Wednesday lecture: Trees
Friday lab: Trees (BinaryTree.java)
Week #7:  February 18 - February 22
Reading:Chapter 19, see also Binary Search Trees
Monday lecture: President's Day -- no class
Wednesday lecture: Binary Search Trees
Friday lab: Practice Exam Solutions
Week #8:  February 25 - March 1
Reading:Chapter
Monday lecture: Review (Study Guide, Last year's exam)
Wednesday lecture: Midterm Exam
Friday lab: Intro to OpenGL/JoGL (A tutorial, My (short) Tutorial, Lab07.java)
Week #9:  March 4 - March 8
Reading:Chapter 19, see also Binary Search Trees
Monday lecture: Exam Answers, AVL Trees
Wednesday lecture: Red Black Trees
Friday lab: Cancelled
Spring Break:  March 11 - March 15
Week #10:  March 18 - March 22
Reading:Chapter 19, 21, see also Binary Search Trees
Monday lecture: AA Trees
Wednesday lecture: B-trees
Friday lab: More OpenGL/JoGL (Lab08.java, Lab08.html, Lab08.jnlp)
Week #11:  March 25 - March 29
Reading:The Internet
Monday lecture: Spatial Data Structures (Regular grids, Quadtrees, KD-trees, BSP-trees)
Wednesday lecture: Building Balanced KD Trees
Friday lab: Boids (Crowd.java)
Week #12:  April 1 - April 5
Reading:
Monday lecture: Transformations
Wednesday lecture: Lighting/Shading
Friday lab: Drawing and Lighting in 3D (Lab11.java, Lab11A.java)
Week #13:  April 8 - April 12
Reading:Chapter 20 and 21
Monday lecture: Heaps
Wednesday lecture: Hash Tables
Friday lab: Implementing a Heap
Week #14:  April 15 - April 19
Reading:
Monday lecture: Graphs: Storage, BFS, DFS, Shortest Paths, Topological Sort
Wednesday lecture: Surprise!
Friday lab: Cancelled
Week #15:  April 22 - April 26
Reading:
Monday lecture: Graphs: Minimum Spanning Trees, Strongly Connected Components
Wednesday lecture: Exam Review (Study Guide, Last year's final)
Friday lab: none

Assignments

Assignment 0: Java vs. ActionScript Due: 01/11/13 (in lab)
Assignment 1: Linked List Due: 01/18/13 (noon) DoublyLinkedList.java
Assignment 2: Edge Detection Due: 01/25/13 (noon) EdgeDetector.java
Assignment 3: Seam Carving Due: 02/01/13 (noon) SeamCarver.java
Assignment 4: Sudoku Due: 02/08/13 (noon) Sudoku.java
Assignment 5: Sorting Due: 02/15/13 (noon) Sorting.java
Assignment 6: Stacks and Queues Due: 02/22/13 (noon) StacksAndQueues.java
Assignment 7: Binary Search Tree Due: 03/08/13 (noon) BinaryTree.java
Assignment 8: AVL Tree Due: 03/22/13 (noon) AVLTree.java
Assignment 9: Bomb Game Due: 03/29/13 (noon) BombGame.java
Assignment 10: Boids with a KD Tree Due: 04/05/13 (noon) KDCrowd.java
Assignment 11: 3D Game Due: 04/24/13 (noon)