Algorithms are the soul of computing. Algorithmic thinking, unlike the very young electronic machinery it brings alive, is rooted in ancient mathematics. It can be roughly described as creating “recipes” (well defined sequences of computational steps) for getting “things” (computational problems specifying an input-output relation) “successfully” (correctly) “done” (in finite steps and time). This course introduces basic methods for the design and analysis of efficient algorithms emphasizing methods useful in practice. Different algorithms for a given computational task are presented and their relative merits evaluated based on performance measures. The following important computational problems will be discussed: sorting, searching, elements of dynamic programming and greedy algorithms, advanced data structures, graph algorithms (shortest path, spanning trees, tree traversals), string matching, elements of computational geometry, NP completeness.


Instructor

  • Dr.Hossein Shafiei


Teacher Assistants

Head Teacher Assistants

Teacher Assistants