CS2420 | Introduction to Algorithms and Data Structures | Spring 2018

INSTRUCTORS:
Dr. Miriah Meyer & Dr. Erin Parker

INSTRUCTION ASSISTANT:
Ryan Sargent

LECTURES: T/Th 3:40-5pm
PLACE: ASB 220

LABS: M various times
PLACE: MEB 3225 & WEB L126

OFFICE HRS:
Dr. Meyer | W 3-5pm, WEB 4887
Dr. Parker | varied, see Canvas


This course provides an introduction to tools found throughout computer science - basic algorithms and data structures that lend themselves naturally to computational problem solving, and engineering computational efficiency into 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). Students will complete extensive programming assignments that require the implementation and testing of these concepts.

schedule

week date topic homework exams
1 1/8 - 1/14 Introduction & Java review 01 | Matrices | solo
2 1/15 - 1/21 OOP & generics 02 | Generic Books | solo
3 1/22 - 1/28 Algorithm analysis 03 | Searching a List | TBD
4 1/29 - 2/4 Basic sorting 04 | Anagrams | pair
5 2/5 - 2/11 Recursive sorting 05 | Quicksort and Mergesort | pair
6 2/12 - 2/18 Linked list, stacks, queues 06 | TBD | TBD
7 2/19 - 2/25 Midterm Exam 1 on Thursday
8 2/26 - 3/4 Trees 07 | Binary Search Trees | pair
9 3/5 - 3/11 Graphs 09 | PacMan! Graph Search | pair
10 3/12 - 3/18 Hash tables 10 | Hash Tables | solo
11 3/19 - 3/25 spring break
12 3/26 - 4/1 Binary heaps 11 | Binary Heaps | solo
13 4/2 - 4/8 Final project 12 | TBD | pair
14 4/9 - 4/15 Huffman compression
15 4/16 - 4/22 Ethics 13 | TBD | TBD
16 4/23 - 4/29 Wrap-up & review Final on Apr 30th at 3:30pm

syllabus

prerequisites

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

objectives The following are the expected outcomes for students completing this course:
  • Students will learn algorithms for basic searching and sorting, as well as the asymptotic behavior of each.
  • Students will become proficient implementing and using basic 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

There is no required textbook for this course. We will recommend online sources throughout the semester.

software

We will use the web-based PollEverywhere software during lectures for asking and answering questions. At the start of each class we will provide the relevant URL. While not required, we encourage students to bring a web-enabled device to the lectures to make use this technology.

videos of lectures

We will be experimenting with live-streaming and recording of lectures via YouTube. You can find links for the videos in the weekly modules on Canvas. The videos are meant as an additional resource for you to review lecture content. They are not a substitute for attending lectures. BE AWARE: Our recording process WILL fail at some point during the semester, so do not rely on videos for receiving lecture content.

online resources

Download: Java SDK 8
Download: Eclipse IDE for Java developers
Java API documentation
The official Java tutorials

Java notes
Learn Java in Y minutes
Coding practice in Java
JUnit 4 Basics in Eclipse video
A comparison of Java, C++, and Python

Open Data Structures

grading

Grades in this course will be determined by:

  • 50% assignments
  • 40% exams (2)
  • 10% participation and labs

Assignments consist of weekly programming assignments, some of which will be done in pairs. The specifications of these assignments will be posted online each week. The assignments will be due a week + a day after they are released, with the exception of the second and final assignments which will be due two weeks after release. ASSIGNMENTS WILL NOT BE ACCEPTED AFTER THE DEADLINE. NO EXCEPTIONS.

You will hand in your programs through the course Canvas page. 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. If you wish to appeal a score on an assignment (or a test) must do so within one week of receiving the score and use the regrade request form posted on the class website.

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.

Two exams will be given - one during the regular class time, and one during finals week. The in class exam will take place on Thursday, February 22nd, an the final exam will take place on Monday, April 30th from 3:30-5:30pm. 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 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%, B's within 80%, C's within 70% etc. We do, however, reserve the right to adjust this loose scale if need be.

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. A complete list of ways to receive help is on Canvas.

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.

If you have a question, especially about an assignment, check out the recent activity in Canvas discussion board. See if your question has already been asked (and possibly answered). If not, reply to a discussion already started for the current assignment or add a new discussion with an informative title. Your question will be answered by another student, a TA, or an instructor. Furthermore, the entire class will benefit from seeing this Q&A. Confine your posts to questions, concepts, and arranging study groups. When posting, do not post solutions to problems or share significant pieces of code.

If you have a question that should not be read by the entire class, you can reach the course staff via email at teach-cs2420@list.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.

Emails directed to Drs. Meyer and Parker personally will be read as quickly as possible. However, we get thousands of emails each semester and you may not get an immediate response. For time sensitive issues or issues that require a little more privacy, please talk to the teaching staff immediately after class, come to office hours, or use one of the methods described above.

TA call queue
Canvas discussion board
teach-cs2420@list.utah.edu

inclusivity

It is our intent that students from all diverse backgrounds and perspectives be well-served by this course, that students' learning needs be addressed both in and out of class, and that the diversity that the students bring to this class be viewed as a resource, strength and benefit. It is our intent to present materials and activities that are respectful of diversity: gender identity, sexuality, disability, age, socioeconomic status, ethnicity, race, nationality, religion, and culture.

We also except students to treat others in the class, including the teaching staff, with the same level of respect.

Your suggestions on how we can make the course more inclusive and welcoming are encouraged and appreciated. You can give us feedback in person during office hours, or through our anonymous form.

We take incidents of discrimination, bias, and harassment seriously. We will file reports with the Office or Equal Opportunity, Affirmative Action, and Title IX (OEO) about such incidents. If you are unsure what differentiates free speech and professional behavior from discrimination, bias, and harassment we are happy to have an open, judgement-free, and confidential conversation with you, or refer you to the OEO.

U of U Inclusivity Statement
Center for Ethnic Student Affairs
LGBT Resource Center
American Indian Resource Center
Office of Equal Opportunity, Affirmative Action, and Title IX
Center for Student Wellness

pair programming

About half of the 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.

Note that the teaching staff will not answer questions on pair programming assignments unless both partners are present.

cheating policy

Cheating is: sharing (outside of a partnership) written or electronic work either by copying, retyping, looking at, or supplying a copy. And by copy, we mean a copy that belongs to someone else, or your own copy from a previous instantiation of this course. 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

soc and coe guidelines

Students taking courses in, or seeking degrees from, the School of Computing (SoC) and the College of Engineering (CoE), must be aware of their guidelines and policies.

School of Computing Guidelines
College of Engineering Guidelines