Syllabus
CSSE 230 – Data Structures and Algorithms
Summer 2021 (a.k.a. 202140)

What is this course about? 

What will I learn?

Your goal: After successfully completing this course, you will be able to independently analyze, develop and debug software that uses correct, clear, and efficient algorithms and data structures. You will start to think like a Computer Scientist. 

What will I do?

Your work required:
  1. To learn to analyze algorithms (exact and big O runtime of code that uses loops, nested loops, and recursion) and write efficient algorithms, you will complete 1 homework set each week. Mostly these will be written problems, but occasionally there will also be a small program to write.
  2. To independently develop and debug correct, clear, and efficient software, you will complete 1 major program each week. You will learn to plan your design on paper and to use the debugger to trace your code.

Do I have what it takes to do this?

The formal prerequisites are MA 112 and a grade of C or better in CSSE 220, so we expect that you are comfortable with basic summations, know how to program and debug object-oriented Java code well, and that you have experience coding linked lists, recursive methods and simple sorting algorithms. Needed attitudes are (1) a willingness to work hard,  (2) patience to plan your code before writing it, (3) the tenacity to code and debug until it works, (4) willingness to work cooperatively and responsibly with partner(s) on pair and team assignments, and (5) attention to detail while doing analysis.

A more detailed list of attributes, for those who like lists, is here.

What kind of stuff will I learn?

Why ArrayLists double in internal capacity when they fill up and we add another element.

How fast looping and recursive code runs.

Why balanced Binary Search Trees allow you to lookup AND insert items, both in O(log n) time!

What are the two underlying techniques to store ANY collection of data?

How to choose data structures:

Is a linked list better than an array list? It depends!
Is a balanced binary search tree better than a sorted array? It depends (for the same reason!)
When is a binary heap better than a balanced BST? For a common, but very specific use case!
Why not use hash sets for everything?

How to implement all of the above data structures.
And much, much more.

What habits of the mind will I learn?

If we are successful in teaching you, ten years from now, you will know:
...that you often need to wrack your brain planning your code before you ever type a line of it. So you’ll code with paper and pencil at hand!
...that you have no idea if your code does what you think it does unless you step through it. So you’ll use the debugger!
...that it often pays to write and rewrite code so it is elegant.

Who, when, and where? Help!

Instructor Information

Matt Boutell

Email: boutell <at> rose-hulman <dot> edu
Office address: Moench D219B
Office hours: See the top of the course Moodle page.

Course Assistants

Graders: Brendan Boewe (homeworks), Brock Buczkowski (programming)

Lab Assistants: Brendan and Brock will hold some online help session weekly, schedule posted in Moodle.

Many Other Sources of Help

Textbook? Yes.

Required textbook

Zybook cover This is an online, interactive textook, with few words and lots of animations and mini self-quizzes to test your comprehension. You can purchase the book at a discount using a code from the RHIT bookstore. Once you do, the book is here.

This is an online, interactive zyBook. Each day has an associated reading.

One of the greatest assets of the zyBook is its focus on just-in-time assessment (short quizzes to assess comprehension.) Research shows that this type of retrieval practice is effective at committing information to long-term memory. As an online text, you'll pay a fee (approx $60) for access for the quarter. Readings and assessments are due weekly as part of the homework.

Instructions for accessing the zyBook:

  1. Sign in or create an account at learn.zybooks.com
  2. The code for our class is: ROSEHULMANCSSE230BoutellSummer2021
  3. You'll also need an access code. You can buy it online or from the bookstore, both are the same cost. But there is slight advantage to buying it through the bookstore in convenience (1-stop shopping for all your classes), AND the bookstore receives some of the $58, and the profits that Rose receives are used to help keep the school running. So it's in your best interest, at least indirectly. The online ordering system will asked you if you want it "shipped" or "picked up". I'm told that you should choose "pick it up", even though the book is online, to avoid a potential shipping cost. It may auto-reply with shipment info, but someone from the bookstore will email you the access code with instructions for how to use it online.

Where is the course online?

We will use Moodle to post grades and materials that require restricted access, like lecture videos, quizzes, surveys, and homework solutions. Moodle is the hub of the course.

Starting code for most programming projects will be provided using Git repositories (details in the first programming assignment document). 

What are the homework policies?

Your solutions to weekly programming problems should be well-designed and well-documented. Some will be done with a partner, others will be individual. Each submitted program file should include (in comments at the top of your files) your name(s) and a description of the file’s contents. You should use reasonable and consistent Javadoc comments, style, and indentation. Longer methods should contain internal comments that explain why you wrote the code the way you did. Your programs should not contain lines that are exceedingly long (causing wraparound and general unreadability of printouts). Grades for programming problems will be based on correctness, style, and efficiency

We will assign weekly homework problems (written and short coding exercises) and a few in-class exercises. They will usually be short thought problems, mathematical analyses, or algorithm-design exercises. We expect you to think through them carefully and write your answers legibly and clearly (if you can’t write it neatly, type it). On some problems, not only the correctness but also the quality of your solution will determine your grade. Some of the problems will be straightforward practice with concepts from the course; others will require creative solutions. Don’t put them off until the last minute!

There will often be in-class quizzes, which differ significantly from traditional quizzes. The answers to all of the questions should be contained in the lecture. The quizzes should help you to focus on some of the lecture material that we consider most important, to stay on track during discussion time, and to have some notes that you can use for review later. They will be graded for completion. 

Late Assignment Policy

All assignments must be turned in before the due time if you want credit for them .

However, we all have days when we are extremely busy, or times when a program takes longer to complete than we expect it will. To account for this, we give each student a “late day bank account” that starts with three late days. Note: this late day policy applies only to written homework and programming projects. It cannot be used for in-class quizzes and activities, which must be turned in on time for credit.

  1. Using (withdrawing) a late day allows you to turn in any assignment up to 24 hours after the time it is due. It is up to you to turn in work within that time frame, if it falls on a non-class day.
  2. You may earn (deposit) a late day by turning in an assignment at least 24 hours early (We will sometimes refer to this as an “early day”. There is no limit to the number of days you can save up. Extra late days at the end of the term are never redeemable for cash prizes, but sometimes redeemable for a small, small number of extra-credit points. 8-) If you find a mistake on homework submitted early, it’s worth it to fix it and re-submit on time.
  3. If your late day balance ever becomes zero, you must turn assignments in on time until you are able to earn more days by submitting assignments early.  If your late day balance gets down to one any time before the break, consider that a sign that you need to “press harder on the accelerator” in this course.
  4. At most one late day may be used or earned for any given assignment. Talk to your instructor in advance about an extension if you are faced with unusual circumstances requiring more than 1 day.

Late Day Procedures:  You do not have to notify us when you earn or use a late day. Just track your balance. (We will keep track of your late and early days based on the time of your submission to a Moodle assignment page or your latest commit time of a given project to your git repository. 

Some particular assignments may be designated as ”no late days“ assignments. This might happen because:

Occasionally, we will allow extra time for everyone to complete a particular assignment without “extending the due date.” The difference is subtle. If you are working on an assignment during a grace period, you should do so with the recognition that you are behind, and you need to quickly finish it and move on to the next assignment. If we decide to give a grace period for an assignment, we will explain the reason for it.

Exams

There will be three midterm exams and a final exam, all but Exam 2 having a paper part and a computer part. (The smaller, in-class Exam 2 will be computer part only.) Exams 1 and 3 will be evening exams, taking the place of a day of class. Why evening exams?  Evening exams allow all students to take the exam at the same time.  Also, because it is not easy to judge the time required for the programming part, it allows us to give you a few additional minutes at the end if they are needed.

How will my grade be figured?

Weight Criteria
10% In-class quizzes (ICQ), videos, engagement
5% Reading engagement (zybooks)
30% Written assignments, programming projects, in-class exercises
10% Term project
13% Exam 1
7% Exam 2 (programming only)
15% Exam 3
10% Exam 4

Final grades are also contingent on the following:

The above is a guideline that we typically follow. Please understand that it is not a promise. We will do our best to conform to the Rose-Hulman definition of the various grades, as described in the Academic Rules and Procedures. As you read it, note in particular that the phrase “thorough competence to do excellent work” appears in the description of the “B” grade (the standard for “A” is even higher), and it further states that “B” and “B+” will not be given for mere compliance with the minimum essential standards of the course. 

Citizenship Counts!

We may adjust your overall average up or down by up to 5 percent, based on your citizenship in the CSSE 230 learning community. This includes (virtual or in-person) attendance, engagement, adherence to deadlines, positive participation in class and online discussion forums, constructive partnership in pair and group assignments, timely completion of various surveys, and peer evaluation of other students’ code and of your team members for group projects.

What does the online format mean?

This course is mostly asynchronous, which means that you have some freedom over when you watch the lecture videos. If you work ahead, this can be a huge benefit! The BIGGEST danger is falling behind and not working immediately to catch up. There is much material in this course and it moves at a FAST pace. If you feel yourself falling behind, ask yourself what you can drop to make more time for classwork. I am very willing to work with you to help catch up if needed. But you MUST ask for help.

Is it OK for my friends to help me with my homework?

It depends how they “help” you...

Recall the Institute policy on academic misconduct:

“Rose-Hulman expects its students to be responsible adults and to behave at all times with honor and integrity.”

Exams and homework will be done on an individual basis except where explicitly noted. The simple rule of thumb for individual work is:

Never give or use someone else’s code or written answers.

Such exchanges are definitely cheating and not cooperation.

We encourage you to discuss the problems and general approaches to solving them with other students. However, when it comes to writing answers or code, it must be your own work (or the work of your group if it is a group assignment). If you are having trouble understanding how some Java API code works or pinning down a run-time or logic error in your program, by all means talk to someone about it. Get help with debugging when you need it.

If you use someone else’s ideas in your solution, you must:

If you are ever in doubt about whether some specific situation violates the policy, the best approach is to discuss it with your instructor beforehand. This is a very serious matter that we do not take lightly. Nor should you.

You should never look at another student’s code to get ideas of how to write your own code. Beginning the process of producing your own solution with an electronic copy of work done by other students is never appropriate.  

Working on written problems with other students is strongly encouraged. However, once you have solved a problem, each student should write up the solution individually, without referring to the common solution, to make sure that all of you understand it.  Again, electronic copying is never appropriate.

Plagiarism (where a student solution to an exam or assignment was copied from another student’s solution, past or present, or any solution that is posted anywhere) will result in a score of -100% for the assignment or exam. Egregious cases will result in a grade of “F” for the course. Furthermore, such cases will also be reported to the Department Head and Dean of Students, as required by the Institute policy, to be added to the student’s record and so discourage repeat offenses. More importantly, such dishonesty steals your own self-esteem and your opportunity to learn. So don’t cheat!

Making our classroom welcoming

We want you and the other students to feel welcomed in our classroom.

If at any point, you are not comfortable in the classroom, for ANY reason, or you observe any behaviors by ANYONE (classmates, course assistants or your instructors) that may make the classroom climate feel less welcoming for students: please tell us.

Ways to do so include:

You can do your part to ensure a welcoming, professional classroom climate.

Working with special needs

Rose-Hulman, and the instructors of this course in particular, are committed to working with students who have special needs or disabilities. We understand that “invisible” disabilities (learning and attention deficit disorders, chronic fatigue syndrome, depression, anxiety, etc.) can significantly affect a student’s academic performance.

We strongly encourage students to document special academic circumstances with the staff at the Office of Student Affairs and then to contact us as soon as possible so that we can work together to provide recommended academic accommodations while protecting your privacy. Please note that it is the student’s responsibility to request any approved, documented academic accommodations (such as extra time) at least one week in advance of exams.

Another pair of resources available to students for free:

Official Course Info

Course Catalog Description

This course reinforces and extends students’ understanding of current practices of producing object-oriented software. Students extend their use of a disciplined design process to include formal analysis of space/time efficiency and formal proofs of correctness. Students gain a deeper understanding of concepts from CSSE 220, including implementations of abstract data types by linear and non-linear data structures. This course introduces the use of randomized algorithms. Students design and implement software individually, in small groups, and in a challenging multi-week team project.

CSSE Department’s Official Learning Outcomes

Students who successfully complete this course should be able to:


1. Describe classical data structures (list, stack, queue, tree, priority queue, hash table, graph, set, dictionary) and explain issues involved in implementation choices for each.
2. Explain classical sorting, graph and tree-balancing algorithms.
3. Develop empirical and mathematical analyses of the asymptotic worst, best and average case run times of algorithms appropriate for this course.
4. Justify the choice of an algorithm based on the analysis of several algorithms appropriate for a problem.
5. Design and implement object-oriented programs competently and independently.
6. Implement various data structures, and apply them to medium-sized programming exercises.     
7. Work with a team of 2-3 students to implement a complex data structure, using basic software engineering techniques, such as pair programming and unit testing, and demonstrating effective team decision making, division of labor and conflict resolution.