Course Information
This course is intended to be a gentle introduction to the fundamentals of algorithm design and analysis for students who are not necessarily computer science majors, but who have some experience with computer programming.
While algorithms have been studied in some form since ancient times, the development and widespread adoption of digital computers has resulted in an explosion of activity over the last hundred or so years. From this activity emerged a core collection of techniques for (and perspectives on) the storage and manipulation of information.
We will explore this core. In addition to being interesting in and of itself, undertaking this exploration will equip you with one of the basic tools of computer science, allowing you to better understand modern information processing systems, and to make better technical decisions about them.
More concretely, we will study classical data structures including arrays, linked lists, trees, graphs, and hash tables, algorithms operating on these data structures, and the analysis of their time and space usage, as well as their implementation and practical use.
See also the course page in the study information system.
Textbook
The course is based on the book "Introduction to Algorithms", by Cormen, Leiserson, Rivest, and Stein (CLRS).
A number of copies of this book are available from the university library, and digital copies are easy to come by online. While the course has been prepared using the third edition, any edition will work.
Evaluation
Three components determine your grade in this course:
| Assignments | 20% |
| Midterm Test | 40% |
| Final Exam | 40% |
There will be four assignments, each worth %5 of the final grade. Assignments will consist mostly of programming tasks (in Python), while exams will focus on theoretical understanding.
To submit your assignments TBA
Late assignments will only be accepted in exceptional circumstances.
Practical Sessions
Each week there will be two practical sessions, one focusing on written exercises of the kind one might encounter during the exams, and the other focusing on programming in Python.