- Course Information
- Class Logistics and Tools
- Academic Integrity
- Expectations and Advice
This course will teach you how to analyze problems and solve them using computational procedures called algorithms. We will cover many algorithms foundational to Computer Science and learn their uses, advantages, and disadvantages. Most importantly, we will develop skills and intuition to help you design efficient algorithms for new problems.
By the end of the course, you’ll be able to
- Use brute force, decrease-and-conquer, divide-and-conquer, transform-and-conquer, greedy programming, and dynamic programming techniques to solve problems.
- Implement and employ a variety of advanced data structures to solve problems, including graphs, self-balancing trees, and tries.
- Implement a variety of algorithms to sort, search, and traverse data.
- Determine the time and space efficiency of algorithms using Big O, Big Theta, and Big Omega notation in terms of common complexity classes.
- Identify the appropriate use cases of these algorithms, data structures, and programming techniques and evaluate the trade offs of possible solutions, including time and space complexity, to decide on an approach to a problem.
The content and skills in this course have a wide variety of applications in both academia and industry. Pragmatically, many tech companies expect interview candidates to be familiar with these topics and skills. At the same time, this course provides a mental framework that lets you solve hard problems–the problem-solving techniques taught here show up in various subfields in Math, Engineering, and Computer Science.
- CSC 2720 – You should be familiar with coding in Java, data structures such as Linked Lists, Arrays, Trees, and Hash Tables, programming techniques like recursion, as well as finding the runtime of a function via Big-O. We will review essential concepts as we go, so don’t worry if you haven’t mastered everything yet.
- Math 3020/3030 – You should feel comfortable with function notation (e.g.
f(x) = x2), logarithmic functions (e.g.
f(x) = log2(x)), and graphs of mathematical functions. Beyond that, we’ll cover the necessary mathematical intuition as we go.
Introduction to Algorithms, 3rd Edition, Cormen, Leiserson, Rivest, Stein
The textbook is optional. While it may be useful for perspective and context into most of our topics, it will not cover the exact same set of topics we’ll traverse. The course website will include relevant chapters of reading when applicable.
This semester, CSC 4520 is part of the Engineer in Residence program, a partnership between Facebook and Georgia State University to bring Facebook engineers into the classroom to teach and to introduce industry insights. Reach out to Dr. Xiaiolin Hu with any questions.
There are five components to this course that help your learning:
- Lecture – regularly scheduled Zoom calls where we’ll introduce the material and go through guided and independent practice on the skills you’re expected to learn. We’ll also use lecture time to work through quizzes and hold exams.
- Homework – where you solidify your understanding with practice. It’s important to know that you aren’t expected to be able to solve every homework problem right away–some problems will require trial and error, going to office hours, etc., in order to complete.
- Online Discussion (via Piazza) – place to ask questions about the concepts, homework, and anything else course related. Also feel free to post memes.
- Office Hours – individual time for answering questions via Zoom, great for getting unstuck on homework, reviewing topics that you’re confused on, and/or handling any stressful situations.
- Homework Parties/Review Session – collective Zoom call where we go work through the homework together.
In order to make the most out of online learning, we’ll have the following features in our Zoom courses:
- Breaks – Given our longer lectures, we’ll take 5 minutes between topics.
- Chat – Ask questions during live lectures via the build-in chat.
- Raising hands / Reacts / Polling – We’ll use Zoom features to encourage engagement and make the lectures more interactive.
- Breakout rooms – Likewise, for the longer in-class exercises, we’ll break into groups to work on the problems together and learn from each other.
Videos of lecture will be posted after the last section of each live lecture, but participation and quizzes require attendance of live lecture.
In order to succeed in this course, you should be familiar with the following tools:
- Course Website: https://csc4520.org/ – contains all information about the course, including assignments, quizzes, due dates, lecture recordings, etc.
- Zoom: – where the lecture, office hours, and homework parties/review sessions are held.
- Repl.it: – used during lecture for coding demos and in-class activities.
- GitHub – used for coding homeworks. Programming assignments are submitted here.
- Google Docs: – for submitting written assignments and taking assessments.
- Piazza – Q&A board for questions around homework, logistics, course policies, etc.
Students with disabilities needing academic accommodation should
- Register with and provide documentation to the Office of Disability Services
- Bring a letter to the instructor indicating the need for accommodation and what type.
This should be done during the first week of class. For more information about services available to GSU students with disabilities, please contact
The Margaret A Staton Office of Disability Services
Suite 230 Student Center
Georgia State University
Voice and TDD
Telephone: (404) 463-9044
Web Address: https://access.gsu.edu/
- All homework assignments will be submitted via GitHub Classrooms.
- Quizzes and exams will be conducted via Google Docs. A browser and a stable internet connection are required. It is strongly recommended that you also have paper and pencil during the exam. Please contact the instructor if you have questions or concerns.
- The grading schema is subject to change at the discretion of the instructor. Your grade will never go down as a result of a schema change.
- Anyone who has questions or would like additional help, please reach out directly or during office hours. It doesn’t matter if it’s at the beginning of the course or the night before the final, I will try my best to help.
|Item||Percent of Total Grade||Notes|
|Homework||30%||Graded on correctness, each homework is designed for you to get full credit. Lowest 2 homeworks are dropped.|
|Quizzes||20%||Graded on correctness and taken in class, each quiz will have a group portion as well as an individual portion. Lowest 2 quizzes are dropped|
|Exam 1||15%||All exams will be held synchronously via Google Docs. The exams will not be curved. Exams will be representative of what you've seen in class and on homeworks. We will hold reviews and provide practice so that you can feel prepared going in.|
|Effort, Participation, Altruism||5%+||Points for participating in lecture, asking questions in office hours, and helping other students on Piazza. Extra credit points may be assigned for extraordinary efforts.|
- Any late homeworks will be accepted for half credit after the established deadline, for up to five days from the deadline.
- Any missed quizzes can be made up at any of the sections that week that are also holding the quiz. You should also email the instructor if you will regularly be unable to attend lecture.
- Make up exams must be arranged in advance by emailing the instructor.
- Deadline extensions may be considered for extraordinary circumstances, at the instructor’s discretion. Email the instructor with details and a proposed plan.
The course is designed so that you do well when you put in the effort. The instructors will make every effort to help you succeed. Should you find yourself in a position where you feel trapped or encouraged to cheat, we hope you will email us instead to ask for help. That being said, here are the expectations around academic honesty.
For homework, copying solutions from any source (students, websites, textbooks), whether wholesale, in part, or modifying the code afterwards, is strictly considered cheating. Providing solutions to other students or third-party websites, in part or in whole, is also considered cheating.
Exams are independent exercises. Receiving help in any form outside of asking questions of the instructors and consulting your own written notes/the course materials is strictly prohibited.
Note that the above policy does not mean that you have to work alone the entire semester. For homework problems, you’re allowed to discuss approaches, provide hints, and key insights with up to five classmates, but must write up solutions on your own. Please cite any students, web sources, etc. that you consulted while solving problems. You should never possess solutions to exact homework questions other than those solutions you have written yourself.
I know many students find it difficult to define the line between cheating and getting help. Here is the rule: submitting code as your own work that you cannot explain or reproduce in a controlled environment is cheating. Here are some concrete guidelines to help:
- Discussing the problems (”What does this mean?”) and discussing solution approaches in general terms (”Try using recursion”) are okay.
- Looking up syntax online is also okay, although I encourage you to increasingly push yourself towards coding without this resource, since during interviews, you won’t have access to it.
- Blindly following instructions is never okay. For example, if a classmate tells you ”Do X, then do Y, then Z” without understanding why, even if you implement it yourself, you are engaging in cheating.
- Copying someone else’s code, or looking up ”How to solve [insert problem]” online and copying the code from the internet is cheating. It is still cheating if you change a few variable names and move a couple lines around.
- Asking for help on Chegg, Stack Overflow, Quora, etc., is considered cheating, regaradless if anyone provides a helpful answer.
- It is also cheating if you are on the other side of the transaction - i.e., giving a classmate instructions or sharing your code for a classmate to copy is cheating.
- Uploading your homework solutions to any online public space, including GitHub public repos, CourseHero, etc., is cheating.
- If you still are unsure about whether a specific behavior constitutes cheating, don’t do it–instead, reach to the instructors, and we will be happy to clarify for you!
Software will be used in every aspect of the course to detect cheating. MOSS will be used on any coding questions, and all exams will be monitored live. Any student whose assignment is confirmed to not be their own work will receive a zero on the assignment and a one-on-one conversation with the instructor. Any student providing answers will face the same consequences. Repeated offenders will be escalated to the University via the procedures outlined in the Code of Conduct.
The course philosophy can be captured in two points:
- The point of the course is to help you learn.
- The staff is here to help you succeed.
To achieve our philosophy, we have four course rules that we expect everyone to follow.
Marginalized and underrepresented voices are given fair time in the course. I make this explicit, because often it falls through the cracks. In this class, we don’t believe the status quo is good enough, and we seek to change that. What that means is that it’s my responsibility, as well as yours, to ensure that every voice in the classroom is given equal priority and respect. Furthermore, nobody should feel uncomfortable asking a question or correcting a misunderstanding.
Discrimination on any grounds or for any reason will not be tolerated, and will be penalized per university guidelines. My primary goal this semester will be to create a learning environment where everybody feels comfortable both in supporting peers and in receiving help from them.
I will not demand your respect, but I hope to earn it. Conversely, your peers should have your respect from day one, and you should also respect yourself. In this class, we treat each other with the highest regard, and allow everyone in this class to have an equal voice and opportunity to learn. This means showing up on time and ready to learn, out of respect for yourself and your peers who are trying to get the most out of their education.
Learning to give and receive constructive, critical feedback is a very important part of an engineering career, especially in the context of collaboration. You’ll be working with others on the in-class quizzes, homework parties, and on Piazza, where you will have chances to practice this.
This applies to me as well. If I am doing something wrong or if a particular method of teaching is not working, then please share this with me in any way that you feel comfortable, via Piazza, email, or through a TA.
Similarly, every class should be demonstrably valuable. If you feel like you don’t understand why a concept is important in either an academic, industrial, or interview-style environment, then please let me know and I do my best to make why it was included more clear.
I do not expect anybody to master 100% of the content in this course on their first attempt. Misunderstandings are not only expected but healthy. In this classroom, I hope to create an environment where people feel comfortable pushing their limitations and challenging their capabilities. Part of this involves ensuring that people feel empowered to make mistakes and feel supported when they do, both by the instructors and by their peers.
- Don’t cram. Knowledge in this course is built brick-by-brick. There aren’t any shortcuts to developing your skills in this course. If you try to do things last minute, you will suffer, and likely learn less than if you start early and give yourself time to let things sink in.
- Practice as much as you can. No one is born knowing how to invert a binary tree. The more you practice solving problems from homework, from optional exercises, etc., the stronger your skills with algorithms will become.
- Engage in office hours and on Piazza. These resources are here to help you learn. If you’re stuck on a problem for longer than 15 minutes, check Piazza to see if anyone else is stuck in the same way, or ask a question and get things cleared up. If Piazza isn’t helpful, and you’ve been stuck for more than an hour, go to the next office hours to ask about it! No one will judge you for not knowing something.
- Join a study group and stick with it. If you have a regular set of peers who you do homework with, where you actively ask each other questions and explain things, you’ll do surprisngly well. On the other hand, if you’re only there to copy down answers without thinking for yourself, you’ll likely bomb the exams.
Grades and penalties aren’t the purpose of this course. We really just want you to learn. The entire staff is very excited to be teaching this semester and we want all of you to be successful here. Welcome to CSC 4520!