Basic Information
| Instructor: | TA (030L): | ||
|---|---|---|---|
| Office: | 100 Elkton Rd. | Office: | 103 Smith Hall |
| Office hours: | Monday 10:30-11:30 Tuesday 3-4 |
Office hours: | Monday 2-3 Tuesday 2-3 |
| Lecture: | MWF 3:35-4:25 | Lab | M 5:00-5:50 (030L) M 6:00-6:50 (031L) |
| Purnell 238 | Pearson 101D |
Textbook(s)
- Objects, Abstraction, Data Structures and Design Using C++ by Elliot Koffman and Paul Wolfgang (AddALL link)
In addition to covering most of the data structures and algorithms we'll discuss, this book has an excellent C++ primer in the beginning. Also, the chapters contain useful illustrations of the algorithms and often highlight some of the common coding mistakes for different algorithms.
- If you need extra C++ help:
C++ from the ground up by Herbert Schildt
I have the 1994 edition and it's still my favorite C++ reference book. It lacks information on STL and there are some minor outdated portions of C++, but the coverage of core concepts is excellent. The newer editions probably fix many of these issues. (AddALL shows the third edition as $13-17 used).
Calendar
| Date | Topics | Assignments |
|---|---|---|
| February 7-11 |
|
|
| February 14-18 |
|
|
| February 21-25 |
|
|
| February 28-March 4 |
|
|
| March 7-11 |
|
|
| March 14-18 |
|
|
| March 21-25 |
|
|
| March 28-April 1 |
|
|
| April 4-8 |
|
|
| April 11-15 |
|
|
| April 18-22 |
|
|
| April 25-29 |
|
|
| May 2-6 |
|
|
| May 9-13 |
|
|
| May 16 |
|
|
Course Overview
Course Description
Content
This course will cover data structures and algorithms as part of a transition from pure programming to critical thinking about solving programming problems. Additionally, this course will teach students C++.
Objectives
After successfully completing this course, students should be able to:
- program in C++
- pointers and memory management
- object-oriented programming
- templates
- standard template library (STL)
- understand the difference between an abstract data type (ADT) and the implementation
- comfortably solve coding problems using the following ADTs:
- lists: array-based and linked
- stacks and queues
- trees, especially binary trees: binary search trees, heaps, potentially Huffman encoding and tries
- sets/maps: BST-based, hashtable-based, trie-based
- graphs
- analyze the runtime and memory usage of an implementation using:
- Big-O notation
- benchmarking
- understand the computational implications of several ADT implementations:
- array-based lists vs linked lists
- binary search trees (BSTs) and AVL trees for balanced BSTs
- implementing ADTs with BSTs vs hashtables
- understand the basics of graph algorithms
- implement and analyse several sorting algorithms
- selection sort
- insertion sort
- shell sort
- merge sort
- quick sort
- bucket sort
- radix sort
- be able to apply binary search
- be very comfortable with recursion
Structure
Learning is structured in three areas: lectures, labs, and personal practice/reading. Lectures will cover the theoretical material that you need to know and will evaluate your understanding of the content through exams. Labs will challenge you with programming problems, pushing you to really understand the data structures and algorithms. Personal practice will refine the basic understanding of labs and can transform you from an acceptable or good C++ coder into a masterful coder.
Instructor Information
Biography
I recently received my Ph.D. from UD in Computer and Information Sciences and now I'm teaching a couple courses while applying for jobs. My specialization is natural language processing, which seeks to both understand and generate real text/speech/etc using computer software.
Teaching Philosophy
Generally speaking, university courses should be difficult. They should push you just outside of your comfort zone and challenge you to learn more than you would by yourself.
When I think about running a class, I think of it as leading a team. It's really a cooperative process. If something doesn't make sense, let us know and we can try to work together to figure it out. Your TA and I are here to help you learn. Since there are so many students and we have so much to do, things are formalized, but really I think of it as mentoring with limited time.
TA Philosophy
The TA is there to give out, oversee, and grade labs. He/she will help you if you're stuck, but isn't there to do your work for you. He or she is there as a backup help in case you can't figure it out on your own (checking the assignment, checking the book, etc). Part of the point of this course is to get you to the point where you're a knowledgable, self-sufficient C++ coder, and we can't do that if people don't try to be self-sufficient.
Grading & Policies
Lab
Labs
You'll be given a new lab on Mondays and I'll go over the lab in class. The intention is that many students should be able to finish or nearly finish the lab in one period, but you have about a week of time to work on it before the next lab session. Labs will be due on Sundays by 11:55pm.
The exception is the first lab, which will be due at the end of the first lab period (since it's a simple "remember/learn how to code/compile/execute/script" sort of lab).
Projects
Projects are more involved labs, designed for about two weeks of time instead of one week. Typically the code solves a more interesting problem and will require much more code to solve. A part of each project will involve some competitive work. Each project will have grading weight of 2-3 labs.
Late Policy
Labs/projects are due by 11:55pm on Sundays. Any labs turned in afterwards are late. The late penalty is 10% for the first day, 25% for the second day, and 50% for the third day. After the third day late (at 11:55pm), no late assignments will be accepted; they will be given no credit at all.
Submitting labs and lab grading
Labs/projects will be distributed, submitted, and graded via Sakai. We expect your code to compile and run correctly. In addition, you will also be graded on how clean/readable your code is. For reference, see the style guide or Google's style guide.
Lecture
Speak up if you don't understand something. Typically, I'll give the class many opportunities to do so. Don't worry about asking questions that might seem dumb to you; usually if you don't understand something, there are at least two other people with the same question. It's in everyone's best interest to ask for clarification or extra examples.
Exams
There will be a midterm and final. I'll try to design them so that some of the class can finish in about half a class period.
Attendance & Participation
Attendance will be taken in lecture and lab. Similar story with participation in lecture -- all you have to do is get involved in the discussions.
Academic Honesty
You will do all of your own work and none of anyone else's. I take cheating seriously and file incidents with the Office of Judicial Affairs, which ensures that students caught cheating in multiple classes receive much more severe punishments.
Student Guide to University Policies: Code of Student Conduct
Grading
Grading breakdown
The course grade is broken down like so:
- 55% - labs + projects
- 25% - midterm + final
- 10% - homeworks
- 10% - attendance/participation
Final grade rule
The final course grade can't be more than one letter grade over your exam average.
Grade disputes
If you think that we made a mistake or that you were given an unfair grade, contact the grader within a week of receiving the graded assignment/exam. If you aren't satisfied with the TA's response for labs/projects, you can talk to me after talking to them about it.
How to get an A
I can't say it much better than Terry Harvey: How to Get an "A" in CISC105. You're going to have to pay careful attention to detail, work hard, and ask questions.
Letters and what they mean
Grade |
Percentage Required |
What this letter means |
|---|---|---|
| mastery of course material; can create new data structures and analyze algorithms easily | ||
| average understanding, may need some help in a few areas, but can code anything with some help | ||
| below average understanding, needs a lot of help, but has the potential to handle larger projects with extensive effort and help | ||