In this course, you will gain insight into the two most essential areas of study in computer science: algorithms and data structures. It is the prerequisite for any higher level comp sci course because you can’t create or develop anything without knowing how to design an efficient algorithm, how to choose the correct data structure to minimize space complexity, or implement any Abstract Data Type (ADT) you need. Specifically, this class teaches the four basic design techniques for algorithms: (1) exhaustive search, (2) greedy, (3) divide and conquer, and (4) dynamic programming––in addition to the most used data structures and ADTs: arrays, linked lists, stacks, queues, priority queues, heap, hash table, and binary search trees.
I took Algorithms and Data Structures this semester and enjoyed it immensely. It has brought me to a new level of understanding computer science; I previously thought that the main criterion of one’s comp sci skill is their comfort in coding and their knowledge in programming languages, but now I’ve learned that the ideas behind the syntax of code are much more important. Of course, it definitely took me a great deal of time to think through and digest the course materials outside of class, because the final goal was not just to learn what is taught, but how one can gain the ability of forming solutions when facing a problem. As a result, I found myself growing in competitive programming and algorithm design after taking this course.
To succeed in this class, I would definitely recommend attending all the lectures on time, because it moves at a relatively fast pace and you’ll (most likely) often find yourself with questions. Also, turn in all your work on time, since 10% is cut from your original grade each day you are late. Besides that, don’t feel too stressed about homework and try to do it yourself because it’s a great way to verify what you learned, plus it essentially acts as a mini exam for the final. Don’t be discouraged when you feel Marina is criticizing you; know that it is her way of pushing you to be better.
The mid-term and final exams are much harder than homework and the final is weighted at 30% of your grade. There are usually two homework assignments each week: one focusing more on developing ideas, for which you would only need to write pseudocodes, and another which requires implementation via programming. Any programming language is accepted (though Python is recommended for Algorithm leaning), but make sure you feel confident in using it.
Cathy Zhang. Cathy is the Web Master of The Weekly Cad.