Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: Gabe Johnson <gabe.johnson@gmail.com>
- Loading branch information
Showing
1 changed file
with
191 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,192 @@ | ||
cs2270 | ||
====== | ||
CSCI 2270 (Spring 2013) Syllabus | ||
================== | ||
|
||
This describes _Data Structures & Algorithms_, sometimes known as CSCI | ||
2270, at the University of Colorado, Boulder. The course home page is | ||
actually a GitHub repository located here: | ||
|
||
[https://github.com/johnsogg/cs2270](https://github.com/johnsogg/cs2270) | ||
|
||
People | ||
======= | ||
|
||
*Instructor:* Gabe Johnson - gabe.johnson@gmail.com | ||
|
||
*TAs:* | ||
|
||
Yogesh Virkar - Yogesh.Virkar@colorado.edu | ||
Xin Pan - xin.pan@colorado.edu | ||
Shang Ma - Shang.Ma@colorado.edu | ||
|
||
*LAs:* | ||
|
||
(none as of yet) | ||
|
||
Course Purpose | ||
======= | ||
|
||
The purpose of this class is to introduce you to some of the | ||
fundamental tools in computer science: data structures and the | ||
algorithms that operate on them. This will be a tricky course, but it | ||
is _not_ by any means meant to be a "weed out" class. If you are | ||
having trouble, please come see me before it is too late and we can | ||
work something out. | ||
|
||
Computer programming, and the more general idea of computational | ||
thinking, is rapidly becoming a basic literacy skill. By the end of | ||
this course you should be prepared to tackle many advanced CS and | ||
programming challenges. | ||
|
||
Grading and Course Structure | ||
======= | ||
|
||
There are two components to your final grade: Homeworks and | ||
tests. Each component is worth 1/2 of your grade. Homeworks are due on | ||
Fridays. Test dates and homework due dates are given on the calendar. | ||
|
||
Homeworks | ||
-------- | ||
|
||
There are _eleven_ homework assignments. Each is worth 15 points, for | ||
a total of 165 points. Homeworks are due at 6pm. After they are late, | ||
you may only receive a maximum of 5 points. You may use RetroGrade to | ||
turn in your assignment as often as you like. Keep in mind that if you | ||
turn it in after it is due, it will cap your score at 5/15. | ||
|
||
Many assignments can be completed in more than one language, though | ||
you are only required to complete it in C++. Happily, you can turn in | ||
assignments in the other available langauges and earn up to 15 extra | ||
credit points. | ||
|
||
At the end of the semester, _provided you received at least 5 points | ||
on all homework assignments_, extra credit will be aded to your total | ||
homework grade, but **extra credit is weighted at 50%**. So for | ||
example, suppose your homework score is 150, you qualify for extra | ||
credit, and you have 40 points of extra credit. Your final homework | ||
score would then be: | ||
|
||
final_hw_score = hw_score + (0.5 * extra_credit) | ||
== | ||
final_hw_score = 150 + (0.5 * 40) = 170 | ||
|
||
So in this example you got 103% on the homework component. Congrats. | ||
|
||
**Collaboration on homework assignments is strongly encouraged.** If | ||
you work together or find a web site with code that you learn from, | ||
_you must indicate the relevant people and web sites in the source | ||
code you submit_. Further, if you do work with other people, or find | ||
code on other web sites, _you must type all the code yourself._ | ||
Obviously we can't police copy/paste, so please realize this is for | ||
your own good. You won't learn anything with Control-V. | ||
|
||
Homework assignment descriptions and file downloads will appear in the | ||
course GitHub repository over time. I will try to make them available | ||
far in advance so you can work ahead if you like. | ||
|
||
Tests | ||
----- | ||
|
||
There are three tests. Two will happen during normal lecture periods, | ||
and the final is held whenever the university scheduled it. (I'll find | ||
out when this is.) The first two tests will cover material covered | ||
just before it; the final will be comprehensive. | ||
|
||
_Tests are not collaborative. The Eye of Sauron will be watching. So | ||
will I. Do not cheat._ | ||
|
||
Tests have the following point values: | ||
|
||
* Test 1: 40 points | ||
* Test 2: 50 points | ||
* Teset 3 (final): 75 points | ||
|
||
Specific information about tests will appear in the course GitHub | ||
repository about a week before they happen. | ||
|
||
Reading Material | ||
========== | ||
|
||
There is no required book for this course. Textbooks are absurdly | ||
expensive, and there are a number of high-quality introductory texts | ||
available online. Learning to program is best done by writing lots and | ||
lots of code. So: I will suggest readings from these books throughout | ||
the course, but _none of it will sink in unless you write code to | ||
convince yourself that you know what you are doing._ | ||
|
||
We will primarily use the C++ version of book linked below by Clifford | ||
A. Shaffer. There are two versions of this book that differ only | ||
slightly---one is for C++, the other for Java. You are required to | ||
turn in assignments in C++, but extra credit may be earned by | ||
submitting in Java or Python. | ||
|
||
The books below are freely available on the web, but in some cases you | ||
can give the author money if you want a nicer version. | ||
|
||
_Data Structures and Algorithm Analysis_ by Clifford A. Shaffer | ||
:: [http://people.cs.vt.edu/~shaffer/Book/](http://people.cs.vt.edu/~shaffer/Book/) | ||
|
||
_C++ Language Tutorial_ | ||
|
||
:: [http://www.cplusplus.com/doc/tutorial/](http://www.cplusplus.com/doc/tutorial/) | ||
|
||
_Learn C The Hard Way_ | ||
|
||
:: [http://c.learncodethehardway.org/](http://www.cplusplus.com/doc/tutorial/) | ||
|
||
_Learn Python the Hard Way_ | ||
|
||
:: [http://learnpythonthehardway.org/](http://learnpythonthehardway.org/) | ||
|
||
General Topics | ||
======== | ||
|
||
Here are the general topics we will cover in CS 2270: | ||
|
||
* Course overview | ||
|
||
* Desired outcomes: | ||
- Write standard datastructs/algos (DSnA) | ||
- Understand when DSnA are appropriate | ||
- Recognize/create test data for well known DSnA | ||
|
||
* Document code: | ||
- pre/post conditions | ||
- function contracts | ||
- class invariants | ||
|
||
* Foundational concepts: | ||
- pointers | ||
- recursion | ||
- linked lists | ||
- binary search (trees) | ||
|
||
* Sorting algorithms: | ||
- Mergesort | ||
- Quicksort | ||
- Heapsort | ||
|
||
* Algorithm efficiency: | ||
- log, linear, quadratic | ||
- identify algorithm big-O | ||
|
||
* Classes (design/write/test) | ||
- List-based collections | ||
- Stacks | ||
- Queues (priority and otherwise) | ||
- Binary Search Trees | ||
- Balanced Search Trees | ||
|
||
* The Art of Defensive Programming | ||
- Two programming activities: debugging, or bugging | ||
- Top-down design | ||
- Programming with pencils | ||
- Collaboration | ||
- Find and fix bugs | ||
- Good programming style | ||
- Testing strategies (unit tests, interactive tests) | ||
|
||
* Optional Advanced Topics: | ||
- Inheritance | ||
- Graphs | ||
- Finite State Machines | ||
|
||
Code for CSCI 2270 - Data Structures & Algorithms - University of Colorado Boulder |