The study of algorithms and data structures has come to be recognized as
the cornerstone of computer science.
Algorithm Theory is more than just a branch of computer science. It is
central and relevant to most of science, business, and technology. In this
lecture we aim to provide some of the general techniques for the design of
efficient algorithms such as randomized algorithms and data structures,
dynamic programming, greedy, as well as graph algorithms, heuristic
optimization, online and offline algorithms, and more. After attending this
course you will know the algorithms for many prominent problems, and will
be familiar with the algorithmic strategies or paradigms that can be used
to derive them.
You will be able to apply these strategies to new problems and identify
whether or not they are useful in a new situation. You will understand the
fundamental role of data structures used in a particular implementation of
an algorithm, and how they affect the running time.