University of Utah School of Computing
CS 2420:
Introduction to Computer Science II
INSTRUCTOR:    Adam Bargteil
Office hours: M/W 4:30-5:30, Tu 2-3, WEB 2666 (please email to confirm)
TEACHING ASSISTANT:    Nathan Nash (nash173-at-gmail.com)
Ryan Farr (ryanfarr01-at-gmail.com)
Octavio Pimentel (u0610887-at-utah.edu)
Duppelly Abhinay (u0930510-at-utah.edu)
Office hours: Sun noon-5pm, Mon 9am-3pm, Tue noon-2pm, Wed 9am-noon, Thu noon-3:30pm, Fri noon-4pm, WEB L130
TA Queue
WEB PAGE: http://www.eng.utah.edu/~cs2420/
HELP: teach-cs2420-at-list.eng.utah.edu
LECTURE: M/W 3:00-4:20, WEB L104
LAB:    F 9:40-10:30, 10:45-11:35, 12:55-1:45, MEB 3225
UNITS: 4
Midterm Exam: Wednesday, October 8
Final Exam: Wednesday, December 17, 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
  • 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 Structures and Algorithm Analysis in Java by Mark Allen Weiss
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 Mondays at 3:00pm (5 seconds late is late). Any written portion should be handed in at the beginning of Monday's lecture. 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.
  • Downloading code from the internet and attributing the source.
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:  August 25 - August 29
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:  September 1 - September 5
Reading:Chapeter 5, 6.2, 7
Monday lecture: Labor Day (No Class)
Wednesday lecture: Iterators, Big-O
Friday lab: Working with images (ImageManipulation.java)
Week #3:  September 8 - Septembter 12
Reading:Chapter 7
Monday lecture: Recursion (720p)
Wednesday lecture: Dynamic Programming (720p)
Friday lab: Dynamic Programming (DynamicProgramming.java)
Week #4:  September 15 - September 19
Reading:Chapter 7, 8
Monday lecture: Backtracking (720p)
Wednesday lecture: Sorting (720p)
Friday lab: Tic-tac-toe (TicTacToe.java)
Week #5:  September 22 - September 26
Reading:Chapter 8, 16
Monday lecture: Sorting (720p)
Wednesday lecture: Sorting (720p)
Friday lab: Timing Code (Timer.java)
Week #6:  September 29 - October 3
Reading:Chapter 18
Monday lecture: Sorting, Stacks and Queues (720p)
Wednesday lecture: Trees (720p)
Friday lab: Trees (BinaryTree.java)
Week #7:  October 6 - October 10
Reading:
Monday lecture: Exam Review (720p)
Wednesday lecture: Midterm Exam (Study Guide, Last year's exam, Solutions)
Friday lab: Cancelled
Fall Break:  October 13 - October 17
Week #8:  October 20 - October 24
Reading:Chapter 19, see also Binary Search Trees
Monday lecture: Binary Search Trees (720p)
Wednesday lecture: Exam Answers (720p)
Friday lab: No topic
Week #9:  October 27 - October 31
Reading:Chapter 19, see also Binary Search Trees
Monday lecture: AVL Trees (720p)
Wednesday lecture: Red-Black Trees, AA Trees (720p)
Friday lab: Intro to OpenGL/JoGL (A tutorial, My (short) Tutorial, Lab07.java)
Week #10:  November 3 - November 7
Reading:Chapter 19, 20, see also Binary Search Trees
Monday lecture: B-trees (720p)
Wednesday lecture: Hash Tables (720p)
Friday lab: More OpenGL/JoGL (Lab08.java)
Week #11:  November 10 - November 14
Reading:Chapter 21, The Internet
Monday lecture: Heaps (720p)
Wednesday lecture: Spatial Data Structures (Regular grids, Quadtrees, KD-trees, BSP-trees) (720p)
Friday lab: Boids (Crowd.java)
Week #12:  November 17 - November 21
Reading:The Internet
Monday lecture: Building Balanced KD Trees (720p)
Wednesday lecture: Shading (720p) (slides)
Friday lab: Drawing and Lighting in 3D (Lab11.java, Lab11A.java)
Week #13:  November 24 - November 28
Reading:
Monday lecture: Transformations (720p) (slides)
Wednesday lecture: Transformations (720p)
Friday lab: Thanksgiving Holiday
Week #14:  December 1 - December 5
Reading:
Monday lecture: Graphs: Storage, BFS, DFS, Shortest Paths, Topological Sort (720p)
Wednesday lecture: Graphs: Minimum Spanning Trees, Strongly Connected Components (720p)
Friday lab:
Week #15:  December 8 - December 12
Reading:
Monday lecture: Surprise!
Wednesday lecture: Exam Review (720p) (Study Guide, Last year's final Solutions)
Friday lab: Last minute questions

Assignments

Assignment 0: Warm-Up Due: 09/03/14 (3pm)
Assignment 1: Linked List Due: 09/08/14 (3pm) DoublyLinkedList.java
Assignment 2: Edge Detection Due: 09/15/14 (3pm) EdgeDetector.java
Assignment 3: Seam Carving Due: 09/22/14 (3pm) SeamCarver.java
Assignment 4: Sudoku Due: 09/29/14 (3pm) Sudoku.java
Assignment 5: Sorting Due: 10/20/14 (3pm) Sorting.java
Assignment 6: Stacks and Queues Due: 10/27/14 (3pm) StacksAndQueues.java
Assignment 7: Binary Search Tree Due: 11/03/14 (3pm) BinaryTree.java
Assignment 8: AVL Tree Due: 11/10/14 (3pm) AVLTree.java
Assignment 9: Hash Tables Due: 11/17/14 (3pm)
Assignment 10: Boids with a KD Tree Due: 12/01/14 (3pm)
Assignment 11: 3D Game Due: 12/12/14 (midnight)