The course aims at facilitating the students to learn the concepts of algorithm analysis, including amortized and probabilistic techniques. Problem solving, through an intuitive understanding of classical algorithm design paradigms, forms the major aim of the course. The fundamental concepts of complexity, leading to a capability of approaching problem complexity assessment, and an introduction to randomized algorithms, are also intended outcomes of the course.