CS 113 – FALL 2022 DATA STRUCTURES & ALGORITHMS
Hello, dear friend, you can consult us at any time if you have any questions, add WeChat: daixieit
CS 113 – FALL 2022
DATA STRUCTURES & ALGORITHMS
WELCOME!
If we use the metaphor of a car, up until now you’ve learned the basics of driving (CS111) and some advanced moves like parallel parking and drifting (CS112). This is the class where we learn about thermodynamics and how combustion works, what has been giving our car the energy of locomotion. In this course, we’ll be exploring the design of data structures and algorithms and formally defining efficiency from various perspectives throughout the semester. You’ll also be getting a taste of what software engineering is, specifically Agile development, and learning to use more industry-standard tools. Oh, and you’ll be doing a ridiculous amount of programming. Let’s get started!
HOW TO SUCCEED
Communication is key! Make sure you check your email at least once a day, but more importantly make sure you communicate any concerns, issues, or problems as you run into them during the semester. You’ll see why this is so important as you read through the rest of the syllabus. All of the course material can be downloaded from our Canvas course.
Studying
It’s important that, after the lecture, you review the material covered to ensure you learned it thoroughly. If you had trouble with the reading, give it another shot after the lecture, hopefully, it will be more straightforward after covering the material in class. Make sure to complete this BEFORE doing the homework as it will test your critical thinking skills, which need a strong grasp of the fundamentals covered in the reading/lecture to solve harder problems. Especially with the many ways we manage and store data, you may want to keep a running cheat-sheet with key facts and pitfalls as the semester goes on. Make sure to draw out steps/actions for a subroutine to visualize a data structure to help you understand scenarios we didn’t have time to go over in class. You're encouraged to study in groups!
Readings
Readings come from Koffman and Wolfgang“Data Structures: Abstraction and Design Using Java”(2nd Ed., 2010). Make sure to at least skim the chapter assigned before attending lecture, it may be confusing but you’ll have a much better grasp of the material as we go over it in class!
Lectures & Notes
You should arrive on time and ready to work, but your presence does not always mean you are ready to learn! If you are dealing with food/home insecurity, dealing with a recent loss, stressed, etc. this can have adverse effects on your learning. Please make sure to take advantage of the resources described on the previous pages. If you arrive late to a couple of classes, or even miss class, expect to receive an email from me checking in to see if any accommodations are needed. Regular attendance is important since each class builds upon the previous lessons. Lecture slides are posted a week ahead in various formats (full color, as well as black & white in: 2/page, 3/page, and 6/page) so that you can print/download ahead of time and annotate them with your own personal notes in class. Some lecture slides can be VERY long due to animations, check before printing! Definitely bring paper and a pencil (or some digital writing alternative) as we do a lot of drawing exercises in class.
Exams/Tests/Quizzes
Tests are based on the lectures, key concepts and written exercises done in class.
Missing an exam will result in a score of 0, so make sure to talk to me early enough to accommodate a makeup or early exam.
Homework/Labs
If I were teaching you how to swim, shoot a basketball, or crochet a scarf through a lecture or PowerPoint, Iwould guess you wouldn’t have mastered any of those skills in the time we shared in class. Studying is you practicing what we covered in the reading/lecture, ensuring you got the foundation down. Further practice is needed (i.e. swimming more than one lap, shooting the basketball further away, crocheting a wider scarf) to try new things that weren’t able to be covered in class. Finally, the homework is where you will find the hardest problems (i.e., swimming 5 laps under 5 minutes, shooting a 3-point jump shot, crocheting matching gloves). So in order to do well on the homework, make sure you study, practice, THEN attempt the homework! See schedule for homework deadlines. Homeworks/Labs are assigned and completed weekly, in general, no late homework is accepted but accommodations can be made with enough of notice. However, the lowest homework score will be dropped (Canvas is set up to automatically do this as the semester goes on).
Group Projects
Projects are similar to homework, but in self-assigned pairs. The purpose is to practice Agile programming on real projects with a different classmate for each group project. The group projects will usually have a further application of a specific data structure(s), building them up to the final project.
Final Group Project
You will have an open-ended project in an assigned group of 2 students at the end of the semester. It must implement a generic Graph data structure and at least one Graph algorithm in a useful/significant way. You are also encouraged to use external libraries and APIs. Further details and guidance will be given later in the semester.
GRADING
The course is based on the percentage of total
points earned. Notice the largest percentage of
your grade is homework. I would rather reward
the time and effort you put in outside of class
more than weighing exams where you have to
perform on-the-spot.
Make-up group projects or late-homework are generally not accepted. However, I am always willing to accommodate personal, family, child-care, physical/mental health, work and other emergencies (to name a few). The best way to ensure that you are accommodated appropriately and it does not affect your grade or progression through the class is to contact me as soon as possible. Contacting me before deadlines or assignments are due will increase the likelihood of accommodations, after-the-fact makes it much more difficult unless they are extenuating circumstances. When in doubt, talk to me ASAP!
OFFICIAL STUFF
COURSE DESCRIPTION
This course is designed for programmers who know the fundamentals of programming but would like to design efficient solutions to common programming problems. This course will use the Java programming language as the implementation language for solving these programming problems. Students will learn to use the following algorithm and data structures: sorting, searching, hashing, collections, lists, stacks, queues, trees, sets, dictionaries, and graphs. The students will also learn to choose the appropriate data structure and algorithm for different problems and they will effectively analyze their solution to see if it meetings various criteria for performance. They will employ object-oriented programming techniques and learn some basic design patterns. In addition, the students will learn the beginning concepts of a version control system.
COURSE LEARNING OUTCOMES
At the conclusion of this course, students will be able to demonstrate the following outcomes:
1. Analysis - Students will be able to analyze abstract programming problems involving data sets and produce software designs that utilize appropriate data structures. This includes analyzing the efficiency of an algorithm in comparison with other similar algorithms.
2. Problem Solving - Students will generate solutions to programming problems using existing data structures as well as employ efficient and appropriate algorithms to access and process the data contained within the data structures.
3. Communication - Students will be able to describe basic data structures and explain the details of common algorithms used to manipulate the data contained in those data structures both verbally and in writing.
4. Teamwork - Students will be able to work in a team that will agree on an organizational model, establish roles and delegate tasks to develop designs which incorporate data structures and algorithms and produce a programming project in a timely, cooperative, and collective manner.
ETHICS
Assignments are to be completed by the individual student unless otherwise noted directly by the instructor. While meaningful dialogue over homework is acceptable, turning in work that someone else has completed is considered academic dishonesty. Other things that could also be deemed as academic dishonesty, but not limited to, are: using all or parts of a solution online (Google, StackOverflow, GitHub, Yahoo Answers, etc.), sharing all or parts of your code with a classmate, turning in code that fakes output but does not actually solve intended problem, and other practices up to the discretion of your instructor. All parties involved will receive no points for that assignment. Also, any student caught cheating on a quiz or exam will automatically receive a 0.
2022-08-25