CS2420 | Introduction to Algorithms and Data Structures | Spring 2015

INSTRUCTOR: Dr. Miriah Meyer

LECTURES: T/Th 10:45am-12:05pm
PLACE: L101 WEB

LABS: M various times
PLACE: 3225 MEB

OFFICE HRS: T 1-3pm, WEB 4887

This course provides an introduction to tools found throughout computer science -- basic algorithms and data structures that lend themselves naturally to computational problem solving, as well as the problem of engineering computational efficiency in to programs. Students will gain an understanding of classical algorithms (including sorting, searching, tree and graph traversal), and data structures (including linked-lists, trees, graphs, hash tables, and heaps), and an introduction to parallel computing. Students will complete extensive programming assignments that require the implementation and testing of these concepts.

schedule

week date topic exams
1 1/13 & 1/15 Introduction & Java review
2 1/20 & 1/22 OO & generic programming
3 1/27 & 1/29 Algorithm analysis & data structures
4 2/3 & 2/5 Basic sorting
5 2/10 & 2/12 Recursive sorting
6 2/17 & 2/19 Linked lists Midterm 1 on Tues
7 2/24 & 2/26 Stacks & queues
8 3/3 & 3/5 Trees
9 3/10 & 3/12 Graphs
spring break
10 3/24 & 3/26 Hash tables Midterm 2 on Thurs
11 3/31 & 4/2 Binary heaps
12 4/7 & 4/9 File compression
13 4/14 & 4/16 Huffman compression
14 4/21 & 4/23 Visualization
15 4/28 Final exam review Final exam on Thurs

ta's

Tulasi Aravapalli John Clukey Jason Davis Dasha Pruss Hitesh Raju Ryan Sargent Cory Simon

syllabus

prerequisites

Students are expected to have a working knowledge of Java and to be able to complete the tasks required in CS1410.

objectives The following are the expected outcomes for students completing this course:
  • Students will learn algorithms for searching (sequential and binary) and sorting (selection, insertion, mergesort, quicksort, heapsort, radix sort), as well as the asymptotic behavior of each.
  • Students will become proficient using (and in many cases, implementing) data structures fundamental to computer science including arrays, linked lists, stacks, queues, graphs, trees, binary search trees, Huffman trees, hash tables, binary heaps, and priority queues. Students will reason about the asymptotic behavior of basic operations on these data structures.
  • Students will regularly evaluate their solutions for efficiency through written reports. Evaluations will summarize efficiency in time (Big-O and/or actual running time), efficiency in space (memory requirements), and/or programmer efficiency (ease of implementation and maintenance) of solutions.
  • Students will improve on the object-oriented programming skills learned in CS 1410. Student understanding of the concepts of inheritance, polymorphism, and generic programming will be strengthened significantly by creating solutions with multiple levels of inheritance and by implementing generic versions of data structures.
  • Students will gain experience using and implementing recursion. Students will also be introduced to dynamic programming. Students will learn when to apply iteration or dynamic programming instead of recursion.
  • Students will methodically test their solutions according to a variety of testing models including white-box testing, black-box testing, and unit tests.
  • Students will gain experience designing, implementing, and testing solutions in pairs using the techniques of pair programming.
textbook

Data Structures & Problem Solving Using Java, 4th Edition. Mark Allen Weiss, Addison Wesley. (An eBook is available)

clickers

We will use Turning Technologies "clickers" for in-class participation. Lectures will contain questions which you will answer with your clicker. Clicker participation will count towards your grade.

online resources

Download: Java SDK 7
Download: Eclipse IDE for Java developers
Java API documentation
Java notes

Introduction to Programming Using Java
Brewing Java: A Tutorial
Sams Teach Yourself Java in 24 Hours
The official Java tutorials

C++ and Java Syntax Differences Cheat Sheet
A crash course from C++ to Java
A comparison of Java, C++, and Python

grading

Grades in this course will be determined by:

  • 50% assignments
  • 25% midterm exams (2)
  • 15% final exam
  • 10% participation and labs

Assignments consist of weekly programming assignments, most of which will be done in pairs of 2. The specifications these assignments will be posted online each week. The assignments will be due one week after they are released, with a one day late penalty of 10% -- assignments handed in more than one day late will not be graded. You will hand in your programs through Canvas. Partial credit may be given for incorrect programs, but it must be clear that a strong attempt was made. If your program does not compile or run, no credit will be given. Programs will be graded on readability, comments, and design of the code, as well as correctness in execution. Assignments will also consist of a written portion describing the design of the program, and documenting the performance of your code. All reports must be typed -- no scanned handwritten work will be accepted!

The last assignment of the semester will be a comprehensive project lasting two weeks, in which you will design a solution to a problem from the ground up, with little or no framework given to you. You will have the freedom of selecting which algorithms and data structures are best suited to solving the problem, and designing a complete program around your solution.

Midterm exams will be given during the regular class time in the regular class room. The final exam will take place on Thursday, April 30th from 10:30am-12:30pm in the regular class room. All exams are written exams. As an anti-cheating measure, students who fail the exams will fail the class regardless of their assignment scores.

The class participation grade will be based on completion of lab exercises, clicker responses, and overall contribution to the class and labs.

The final grade will be calculated from exams, programming assignments, written homework, and laboratory exercises. A's will be given to students within 90% of the best student, B's within 80%, C's within 70% etc. In the event that grading is too severe, I reserve the right to adjust grades upwards.

getting help

Every student will get stuck sooner or later. When you do, feel free to ask for help in person or through the class website. We are happy to help.

In-person help is the most effective way to learn. Please make use of our office hours whenever possible. TAs will hold their office hours in the CADE lab, WEB L224 and WEB L226. When you arrive for TA hours, use the TA call queue to request TA help.

NEW! As a pilot program we will be offering tutoring sessions in two forms -- 30 minute small group sessions, and 1 hour discussion sessions. The small group sessions are to help students understand the concepts covered in class and in the assignments. These sessions are aimed to help those who don't have programming background or who feel that they are lagging in the concepts as compared to their classmates. In these sessions you can discuss specific concepts that you are interested in with the TA, but not these sessions WILL NOT BE to debug your homework. Up to 3 students can sign up in single slot. In the discussion sessions we will discuss topics proposed by you. When you sign up for a discussion session slot you can propose topics for discussion by leaving a comment -- you must do this at least one day before the session. Discussion sessions will be with 10-12 students for an hour. Doodle pools for signing up for any of these sessions will be linked under the weekly lectures below.

The student-to-student Canvas forum is where you should post simple questions for other students. If you'd like to find a study partner, if you discover something really cool, or if you just have a simple question, feel free to post to this forum. The only rule is that you are not allowed to discuss specific solutions to upcoming homework.

For help from the teaching staff, use teach-cs2420@list.eng.utah.edu. Emails to this address will be sent to all of the teaching staff and you can expect to receive a response within 24 hours.

For emails directed to me personally, I will read it quickly and respond as soon as possible, but I get thousands of emails each semester and you may not get a response. For time sensitive issues or issues that require a little more privacy, please talk to me immediately after class or come to my office hours.

TA call queue
student-to-student Canvas forum
teach-cs2420@list.eng.utah.edu

pair programming

The majority of assignments will be completed in pairs -- each assignment specification will clearly state when work must be done individually or in pairs. When pair-work is required, students must adhere to the techniques of pair programming. Partners are required to contribute equally half of the work and problem solving required for each assignment. Students are encouraged to discuss high-level solution strategies with fellow classmates, but each student is responsible for writing her/his own answer.

cheating policy

Cheating is: sharing (outside of a partnership) written or electronic work either by copying, retyping, looking at, or supplying a copy. Cheating is not: discussing concepts, answering questions about concepts or clarifying ambiguities, or helping someone understand how to use the class tools and software. There must be no collaboration during tests or the final exam. There is a detailed policy that defines cheating for this course. Any student found cheating will fail the course. Supplying cheated materials is considered cheating just as using them is.

School of Computing Policy Statement on Academic Misconduct

lectures : labs : assignments

W1. INTRODUCTION & JAVA REVIEW | JAN 13 & 15

reading - Data Structures & Problem Solving Using Java, Chapters 1 and 2.
lab - no (official) lab this week
- please see the lecture slides for information on help sessions this Friday
- Lab 0, Java refresher
homework - Student survey, due Thursday, Jan 15th at 5pm
- Proficiency exam
- Assignment 1, due Thursday, Jan 22nd at 5pm
slides - L01-intro.pdf
- L02-java-review.pdf

W2. OO & GENERIC PROGRAMMING | JAN 20 & 22

reading - Data Structures & Problem Solving Using Java, Chapters 3 and 4.
lab - no lab this week
homework - Assignment 2, due Friday, Jan 30th at 11:59pm
slides - L03-oop.pdf
- L04-generics.pdf

W3. ALGORITHM ANALYSIS & DATA STRUCTURES | JAN 27 & 29

reading - Data Structures & Problem Solving Using Java, Chapters 5 and 6.
lab - Lab 1: timing experiments
homework - Assignment 3, due Thursday, Feb 5th at 11:59pm
tutoring - sign-up for small group sessions, located in MEB 3423
- sign-up for discussion sessions, located in MEB 3485
slides - L05-algo-analysis.pdf
- L06-collections.pdf

W4. BASIC SORTING | FEB 3 & 5

reading - Data Structures & Problem Solving Using Java, Chapter 8.1 - 8.4.
lab - Lab 2: testing
homework - Assignment 4, due Thursday, Feb 12th at 11:59pm
tutoring - sign-up for small group sessions, located in MEB 3423
- sign-up for discussion sessions, located in MEB 3485
slides - L07-sorting.pdf
- L08-sorting-part2.pdf

W5. RECURSIVE SORTING | FEB 10 & 12

reading - Data Structures & Problem Solving Using Java, Chapters 7, 8.5 - 8.8.
lab - Lab 3: midterm 1 review
homework - Assignment 5, due Thursday, Feb 19th at 11:59pm
tutoring - sign-up for small group sessions, located in MEB 3423
- sign-up for discussion sessions, located in MEB 3485
slides - L09-recursion.pdf
- L10-merge-quick-sort.pdf
demo code - L09.zip

W6. LINKED LISTS | FEB 17 & 19

reading - Data Structures & Problem Solving Using Java, Chapter 17.
- Open Data Structures (in Java), Chapter 3.
lab - no lab this week
midterm - Tuesday, in class
homework - Assignment 6, due Thursday, Feb 26th at 11:59pm
tutoring - sign-up for small group sessions, located in MEB 3423
- sign-up for discussion sessions, located in MEB 3485
slides - L11-linked-lists.pdf

W7. STACKS & QUEUES | FEB 24 & 26

reading - Data Structures & Problem Solving Using Java, Chapter 16.
- Open Data Structures (in Java), Chapter 2.
lab - Lab 4: debugging
homework - Assignment 7, due Thursday, Mar 5th at 11:59pm
tutoring - sign-up for small group sessions, located in MEB 3423
- sign-up for discussion sessions, located in MEB 3485
slides - L12-stacks.pdf
- L13-queues.pdf

W8. TREES | MAR 3 & 5

reading - Data Structures & Problem Solving Using Java, Chapters 18 and 19.
- Open Data Structures (in Java), Chapter 6.
lab - Lab 5: random number generation
homework - Assignment 8, due Thursday, Mar 12th at 11:59pm
tutoring - sign-up for small group sessions, located in MEB 3423
- sign-up for discussion sessions, located in MEB 3485
slides - L14-trees.pdf
- L15-bst.pdf
- Ryan's slides, plus code
demo code - L14.zip
- L15.zip

W9. GRAPHS | MAR 10 & 12

reading Data Structures & Problem Solving Using Java, Chapter 14.
lab - Lab 6: BSTs
homework - Assignment 9, due Monday, Mar 30th at 11:59pm
tutoring - sign-up for small group sessions, located in MEB 3423
- sign-up for discussion sessions, located in MEB 3485
slides - L16-graphs.pdf
- L17-graphs2.pdf

W10. HASH TABLES | MAR 24 & 26

reading - Data Structures & Problem Solving Using Java, Chapter 20.
- Open Data Structures (in Java), Chapter 5.
lab - Lab 7: Midterm 2 Review
midterm - Thursday, in class
homework - Assignment 10, due Thursday, Apr 2nd at 11:59pm
tutoring - sign-up for small group sessions, located in MEB 3423
- sign-up for discussion sessions, located in MEB 3485
slides - L18-hash-tables.pdf

W11. BINARY HEAPS | MAR 24 & 26

reading - Data Structures & Problem Solving Using Java, Chapter 21.
lab - Lab 8: Hash Tables and BSTs
homework - Assignment 11, due Friday, Apr 10th at 11:59pm
tutoring - sign-up for small group sessions, located in MEB 3423
- sign-up for discussion sessions, located in MEB 3485
slides - L19-binary-heap.pdf
- L20-binary-heaps2.pdf

W12. FILE COMPRESSION | APR 7 & 9

reading - Data Structures & Problem Solving Using Java, Chapter 12.
lab - Lab 9: Binary Heaps
homework - Assignment 12, due Tuesday, Apr 21st at 11:59pm
tutoring - sign-up for small group sessions, located in MEB 3423
- sign-up for discussion sessions, located in MEB 3485
slides - L21-huffman.pdf

W13. HUFFMAN COMPRESSION | APR 14 & 16

reading - Data Structures & Problem Solving Using Java, Chapter 12.
- A Tour through the Visualization Zoo. Jeffrey Heer, Michael Bostock, Vadim Ogievetsky. Communications of the ACM, 53(6), pp. 59-67, Jun 2010.
lab - cancelled
tutoring - sign-up for small group sessions, located in MEB 3423
- sign-up for discussion sessions, located in MEB 3485
slides - L22-huffman2.pdf
- L23-visualization.pdf

W14. VISUALIZATION | APR 21 & 23

reading - A Tour through the Visualization Zoo. Jeffrey Heer, Michael Bostock, Vadim Ogievetsky. Communications of the ACM, 53(6), pp. 59-67, Jun 2010.
- Processing tutorials.
lab - Lab 10: Huffman Coding
tutoring - sign-up for small group sessions, located in MEB 3423
- sign-up for discussion sessions, located in MEB 3485
slides - L24-visualization2.pdf
- L25-processing.pdf

W15. FINAL EXAM REVIEW | APR 28

lab - Lab 11: Final Exam Review
final - Thursday at 10:30am
slides - L26-wrap-up.pdf