For course schedule, click here .
Course Logistics
Lecture
Tuesdays and Thursdays 10:50 AM - 12:05 PM
Location: Barnard Hall 103
All lecture recordings, code, and slides will be put on the course website, but I still highly encourage you to come to class. People that attend lecture do better in the class.
Lab
Lab time depends on the section that you registered for:
- Section 003- Fridays 10:00 - 11:50 AM
- Section 004- Fridays 12:00 - 2:00 PM
- Section 005- Fridays 2:10 - 4:00 PM
Location: Roberts Hall 111
Q: Is lab attendance mandatory?
A: Lab attendance is optional. I encourage you to go to lab, but attendance will never be taken. The programming assignments for labs are posted before Tuesdays, and can be completed from home.
Q: Do I have to attend the lab section that I registered for?
A: You do not need to attend the lab section that you registered for. You can attend an earlier/later lab section if you would like
Q: Do I have to bring my own laptop to lab?
A: I would recommend doing so, but Roberts 111 is a computer lab and has all the software and tools for you to complete the lab if you do not have a laptop.
Instructor
Reese Pearsall
Email: reese.pearsall@montana.edu
Office Hours: Monday and Wednesday 1:00 - 2:00 PM, Tuesday and Friday 12:10 - 1:00 PM
Office: Barnard Hall 361
Discord: @reese_p
If my door is ever open, you can stop by. You can also email me to arrange a time to meet outside of office hours.
I can also meet via Webex if needed. Email me to arrange a time
Instructor Illness
I am currently in the midst of battling a chronic health condition (non-communicable). Because of this, I am generally not around in-person during the mornings (but you can still easily email/message me).
There may be days where I have to unexpectedly cancel class, or have you watch a recorded lecture instead. If things get really bad (they shouldn't), then it is possible we have to move to an online only format for a short period of time.
Teaching Assistants/Graders
- Section 003- Sultan Yarylgassimov
- Email: sultanyaril@gmail.com
- Office Hours: Mondays 10am - 12pm in Barnard Hall 259
- Section 004- Muzhou (Peter) Chen
- Email: muzhouchen@outlook.com
- Office Hours: Thursdays 9am - 11am in Barnard Hall 259
- Section 005- Sultan Yarylgassimov
- Email: sultanyaril@gmail.com
- Office Hours: Mondays 10am - 12pm in Barnard Hall 259
Lab Assistants
These are upper-division computer science students that are present during lab time to help with your assignments. They do not grade any of your assignments
- Section 003
- Liam Fallon
- Email: ldavidfallon@gmail.com
- Section 004
- Willow Berryessa
- Email:wbwasb@gmail.com
- Aden Hartman
- Email:hartmanaden@gmail.com
- Section 005
- Joshiah Shirley
- Email: josiah.shirley@ecat1.montana.edu
Textbook
Other Required Materials
- Java IDE (choose one of the following)
All of these are free to download and use. I will be using and recommending Eclipse in this class, but you can use any of the IDEs above. IntelliJ is a great IDE, but you must register for a student license with your MSU email
Class Communication
- Discord server link
- I will be using Discord to make announcements, answer any questions, discuss course material, and help debug issues. Please do not overshare answers or solutions in the public channels
- I am literally always on Discord, so you always shoot me a DM whenever.
Other Resources
Catalog Description
- Credits: 4
- Prerequisite: CSCI 132- Basic Data Structures and Algorithms (Required)
- Description: Advanced data structures and programming techniques and their application. Topics include: trees, balanced trees, graphs, dictionaries, hash tables, heaps. Examines the efficiency and correctness of algorithms. The laboratory uses Java.
Note from Reese: Before taking this class, you should feel comfortable basic Java programming, be comfortable using the following data structures: arrays, linked lists, stacks, queues, be comfortable with basic recursion, and how to analyze an algorithm using big-O notation
Course Outcomes
By the end of this course, students should be be able to:
- Independently design, write, and test programs of moderate complexity.
- Be able to implement the following data structures: trees, hash tables, graphs
- Identify the tradeoffs of various data structures and make a defensible decision as to which one(s) to use for a given problem.
- Understand problem solving techniques including dynamic programming, divide and conquer, and greedy
- Be able to formally detail the performance of an algorithm (using big-O notation) and identify the factors limiting that performance.
Grading
30% - Labs (12 @ ~2.5% each) (I will drop your lowest lab grade)
40% - Programs (4 @ 10% each)
15% - Midterm
15% - Final Exam
Grading Breakdown
- Labs- These are weekly assignments where you will gain experience with topics taught in class. These coding assignments are typically shorter, and should only take 1-2 hours to complete. Labs are due on Friday nights at 11:59 PM. Labs will be posted a day or two ahead of time.
- Programs- Programs are more lengthy programming assignments. There will be 4 programs assigned throughout the semester, and are due on their specified due date at 11:59 PM. You will be given 2-3 weeks to complete them. These assignments are much more higher stakes, so it is important you get started on them early and get help if needed. You can get help from your TA during lab or during their office hours, and you can get help from Reese during his office hours.
- Midterm and Final Exam (15% each)- There will be two exams during the semester. The midterm will take place the week after spring break, and the final exam will be held during finals week. These exams will consist of conceptual topics we've discussed during the semester, and possibly some coding questions. I will make it very clear what you can expect on the exams beforehand :-)
- The final exam will be optional. If you show up the final exam, you can take the final exam normally. If you don't show up, then the average of your four program grades will be used as your final exam grade. So, if you do well on the programs, then you probably don't need to take the final exam.
Grading Scale
- 93+: A
- 90+: A-
- 87+: B+
- 83+: B
- 80+: B-
- 77+: C+
- 73+: C
- 70+: C-
- 67+: D+
- 63: D
- 60: D-
Q: Do you curve exams or final grades?
A: Maybe, but probably not. If exams or final grades are lower than I anticipated, then I may apply a curve. For final grades, if you are within 1% of the next letter grade, I will bump you up.
Late Assignment Policy
- < 24 hours: 25%
- < 48 Hours 50%
- > 48 hours: no credit.
Getting Help and Succeeding
This can be a tough class, and some of the assignments are tricky. Remember, if you feel challenged by this class,
that is a good thing! I (reese) am always here for you, and I am always happy to help troubleshoot, debug, and answer and questions you have. You can always email me or send me a Discord message, and I will respond as soon as I can. If you have a bug/coding issues, it is generally helpful to attach your code in the email/message.
You should always get help (from Reese, TAs, or Discord) sooner rather than later. This is a
very important class in the computer science curriculum, and it is
not a good class to slack off in.
Stay on top of lectures, get started on assignments early, and try to avoid taking zeros on assignments.
Collaboration Policy
All students should read the
MSU
Student Conduct Code.
All labs will be individual submissions. For programs, you are allowed to work with one partner. Each partner should submit to D2L (but make sure you indicate in your submission who your partner is).
When it comes to labs, you may
- Share ideas with other students in the class.
- Work together on labs in the same physical location.
- Help other students troubleshoot problems.
- Give hints or provide textbook page numbers/slide numbers to students seeking help
You may NOT
- Share your code and solutions directly with other students.
- Submit solutions that you did not write.
- Modify another student's solution and claim it as your own.
- Share your report or solutions directly on Discord
Failure to abide by these rules will result in an "F"
for the course and being reported to the Dean of Students.
Bots and AI
You should not use any bots or AI to develop your solutions on labs, programs, and exams. If it is found that you used such a tool, you will receive a zero on the assignment.
Plagiarism
You may not copy or modify solutions that are not your own (e.g. from the Internet, classmate, ...) for any graded material. Copying and pasting very small snippets of code is acceptable, however copying/pasting or stealing entire solutions from an external source is prohibited. I know how to use the Google and I have a Chegg membership, so If you find something, I will too! It is easy for me to tell if you copy and pasted code from the Internet, so please do not engage in such academic misconduct. If I find a student engaging in plagiarism, I will have to report you to the Dean of Students.
Copyright
Course Materials: The syllabus, course lectures and presentations, and any course materials provided throughout this term are protected by U.S. copyright laws. Students enrolled in the course may use them for their own research and educational purposes. However, reproducing, selling or otherwise distributing these materials without written permission of the copyright owner is expressly prohibited, including providing materials to commercial platforms such as Chegg or CourseHero. Doing so may constitute a violation of U.S. copyright law as well as MSU’s Code of Student Conduct.