Welcome to CS35. This course continues the broad introduction to computer science begun in CS21, providing a general background for further study in the field. By concentrating on data structures and algorithms, you will obtain the basic building blocks by which all large software are built. These topics are central to every sub-discipline in computer science, and also connect to central concepts across the sciences. Topics to be covered include object-oriented programming in C++, advanced data structures (such as priority queues, trees, hash tables, and graphs), advanced algorithms, as well as software design and verification. At the end of this course, you will have obtained the ability to successfully analyze problems in the discipline. You will also take your first steps towards developing the skills necessary to synthesize and evaluate the must fundamental questions in the field.
To enroll in this course you must have completed CPSC 21 or obtain permission from the instructor. This course is designated as a natural sciences and engineering practicum.
Course textbook:
Course pre-requisites:
The CS Ninjas will assist in our in-class lab sessions and run study sessions in the main CS lab (Science Center 240). The time for CS34 Ninja sessions are still to be determined.
You are encouraged to participate in these study sessions to prepare for quizzes, to discuss programming concepts, and to get friendly assistance in working on homework assignments.
If you believe that you need accommodations for a disability, please contact Leslie Hempling in the Office of Student Disability Services, located in Parrish 130, or e-mail lhempli1 to set up an appointment to discuss your needs and the process for requesting accommodations. Leslie Hempling is responsible for reviewing and approving disability-related accommodation requests and, as appropriate, she will issue students with documented disabilities an Accommodation Authorization Letter. Since accommodations may require early planning and are not retroactive, please contact her as soon as possible. For details about the Student Disabilities Service and the accomodations process, visit http://www.swarthmore.edu/student-life/academic-advising-and-support/student-disability-services.xml. You are also welcome to contact me privately to discuss your academic needs. However, all disability-related accommodations must be arranged through Leslie Hempling in the Office Of Student Disability Services. To receive an accommodation for a course activity, you must have an Accomodation Authorization letter from Leslie Hempling and you need to meet with me to work out the details of your accommodation at least two weeks prior to any activity requiring accomodations.
All assignments are due at the time and date specified on the lab write-up. Generally, labs are due Tuesday night at 11:59pm Lab submissions is electronic via handin35, and you may submit multiple times, but each submission overwrites the previous and only the final submission is graded. Unless otherwise stated, you should assume that the lab assignment is to be done individually, and all written assignments must be completed individually even if the programming portion is group oriented.
Each individual is allotted 2 late days for the semester, and a late day may be used for any reason -- illness, interviews, paper deadlines, etc.. Once your late days are used up, labs will not be accepted unless there is serious extenuating circumstances; the fact that you have a lot of other stuff due then is not an extenuating circumstance, sorry. You should budge your 2 late days to account for any future eventualities. Even if you do not fully complete a lab assignment you should submit for partial credit. You must notify the instructor at least 1 day prior to lab deadline (i.e., Monday), and you will use the alternative handin43.late submission program.
Academic honesty is required in all work you submit to be graded. With the exception of your lab partner on approved lab assignments, you may not submit work done with (or by) someone else, or examine or use work done by others to complete your own work. Your code should never be shared with anyone; you may not examine or use code belonging to someone else, nor may you let anyone else look at or make a copy of your code. This includes sharing solutions after the due date of the assignment.
All code you submit must be your own with the following permissible exceptions: code distributed in class, code found in the course text book, and code worked on with an assigned partner. In these cases, you should always include detailed comments that indicates on which parts of the assignment you received help, and what your sources were.
Discussing ideas and approaches to problems with others on a general level is fine (in fact, we encourage you to discuss general strategies with each other), but you should never read anyone else's code or let anyone else read your code. You may discuss assignment specifications and requirements with others in the class to be sure you understand the problem. In addition, you are allowed to work with others to help learn the course material. However, with the exception of your lab partner, you may not work with others on your assignments in any capacity.
``It is the opinion of the faculty that for an intentional first offense, failure in the course is normally appropriate. Suspension for a semester or deprivation of the degree in that year may also be appropriate when warranted by the seriousness of the offense.'' - Swarthmore College Bulletin (2008-2009, Section 7.1.2)
Please see me if there are any questions about what is permissable
Week | Date | Topics/Announcments | Readings | Lab |
---|---|---|---|---|
|
||||
1 | Jan 22 | Intro to CS35 and C++ [Lec. 1.0, Lec. 1.1] |
Chapter 1 : 1.1-1.1.2, Focus Topics:
|
Lab 0: Arrays, Matrices, Oh My! [ pdf ] |
Jan 24 | Intro to C++ (cont) [Lec. 1.1] |
|||
2 | Jan 29 | C++ functions and I/O [Lec. 1.2] |
Chapter 1: 1.4, 1.5, 1.6 Focus Topics:
|
Lab 1: Cellular Automaton [ pdf ] |
Jan 31 | C++ Classes [Lec. 2.1] |
|||
3 | Feb. 5 | C++ Classes (continued) [ Lec 2.1 ] |
Chapter 2: 2.1, 2.2, 2.3 Focus Topics:
|
Lab 2: Swat ATM (Machine (Machine)) [ pdf ] Topic: Debugging GDB and Valgrind |
Feb. 7 |
C++ Inheritance [Lec 3.1] |
|||
|
||||
4 | Feb. 12 | No Lecture Quiz 1 (in lab Feb 13th) |
Chapter 4: 4.1, 4.2 Focus Topics:
|
Quiz 1 |
Feb. 14 | Algorithm Analysis and Complexity [ Lec 4.1 ] |
|||
5 | Feb. 19 | Guest Lecture Dynamic Programming in Biology Prof. Ameet Soni |
Chapter 4: 4.3.3 Focus Topics:
|
Lab 3: Algorithm Analysis [ pdf ] Topic: Loop Invariants and Induction |
Feb. 21 | Abstract Classes and Lists [Lec 5.1] |
|||
6 | Feb. 26 | No Lecture |
Chapter 3: 3.1, 3.2, 3.3 Focus Topics:
|
Lab 4: On Lists and Light Sabers [ pdf ] Topic: ArrayLists and Templates |
Feb. 28 | Linked Lists [Lec 6.1] |
|||
7 | Mar. 5 | Stacks and Queues [Lec 7.1] |
Chapter 5: 5.1 5.2 Chapter 11: 11.1 Focus Topics:
|
Open Lab Time: Work on Lab 4 with your partner! |
Mar. 7 | Guest Lecture: Merge Sorting Prof. Ameet Soni |
|||
|
||||
|
||||
8 | Mar. 19 | Quick Sorting Operator Overloading [Lec 8.1] |
Chapter 11: 11.2, 11.3.3 Chapter 1: 1.4.2 Chpater 7: 7.1, 7.2 Focus Topics:
|
Lab 5: Amazing Mazing [ pdf ] Quiz 2 (takehome) [ Study Guide ] |
Mar. 21 | Trees [Lec 8.2 (replacement)] |
|||
9 | Mar. 26 | Binary Search Trees [Lec 9.1] |
Chapter 7: 7.3 Chapter 10: 10.1, 10.2 Focus Topics:
|
Lab 6: "Release the Crack-ing" [ pdf ] |
Mar. 28 | Balanced Binary Search Trees [Lec 9.2] |
|||
10 | Apr. 2 | Priority Queues and Binary Heaps [Lec 10.1] |
Chapters 8: 8.1, 8.2, 8.3 Focus Topics
|
Lab 7: Web Page Indexing [ pdf ] |
Apr. 4 | Implementing a Binary Heap [Lec 10.2] |
|||
11 | Apr. 9 | Dictionaries and Hash Tables [Lec 11.1] |
Chapter 9: 9.1, 9.2, 9.5 Focus Topics:
|
Lab 8: Ordered Search Results [ pdf ] |
Apr. 11 | Hash Functions Collision Avoidance [Lec 11.2] |
|||
|
||||
12 | Apr. 16 | Hash Probing and Chaining Intro to Graphs [Lec 12.1] |
Chapter 13: 13.1, 13.2 Focus Topics:
|
Lab 9: Hash Tables [ pdf ] Quiz 3 [ Study Guide ] |
Apr. 18 | Graph Implementations [Lec 12.2] |
|||
13 | Apr. 23 | Graph Shortest Path Algorithms Breadth First Search [Lec 13.1] |
Chapter 13: 13.3, 13.5 Focus Topics:
|
Lab 10: The Oracle of Bacon [ pdf] |
Apr. 25 | Dijsktra's Algorithm [Lec 13.2] |
|||
14 | Apr. 30 | Mininum Spanning Trees Primm's vs. Kruskals Disjoint Sets [Lec 14.1] |
Chapter 13: 13.6 Focus Topics:
Advanced C++ |
C++ Reference Types Guest Lecture: Peter-Michael Osera Lecture Slides [PDF] |
May 2 | Currioursly Recurring Templates Guest Lecture: Matt Zucker |