# Design of Algorithms

 COURSE DESCRIPTION Course Description In this course, we will review the fundamentals in the design and rigorous analysis of algorithms oriented toward the solution of data science problems. The first part of the course is devoted to reviewing elementary data structures and algorithm paradigms, with the focus then turning to algorithms on graphs, matching problems, searching problems, applications to data mining and on computational geometry.   Prerequisites Common requirements for the Semester in Mathematical Tools for Data Science and some knowledge of discrete mathematics.
 COURSE GOALS On completion of the course, students will be able to: employ the fundamental concepts necessary for analyzing algorithms in terms of complexity; be able to read and reproduce proofs of correctness of algorithms and understand the different methodologies to implement them; master the essential data structures and main algorithms for dealing with graphs, recursive problems and computational geometry; understand the algorithmic nature of several problems involved in data science; be able to implement rigorously and methodically an algorithm in a high-level programming language.
 COURSE CONTENT Course Content  General tools for studying algorithms (3 weeks)Algorithm/problem complexity. Evaluation of algorithm complexity Elementary data structures (stacks, queues, binary trees, heaps, priority queues, disjoint sets) Algorithms on data sequences (3 weeks)Divide and conquer and dynamic programming, and applications to data science Sequence alignment problems Algorithms on graphs (5 weeks)Graphs in data science. Data structures for graphs, traversal algorithms and applications Algorithms on graphs: shortest paths; Bellman-Ford; Dijkstra; A* Algorithms on graphs: flow networks; applications to bipartite graph matching Applications to Data Science  Handling large datasets (3 weeks)Data mapping and dictionaries; hashing Similarity search Randomized and memory-free methods Bibliography Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford (2009). Introduction to Algorithms, 3rd Edition, MIT Press. [Main textbook] Cormen, Thomas H. (2013).  Algorithms Unlocked, MIT Press. Kleinberg, Jon; Tardos, Eva (2005). Algorithm Design, Addison-Wesley. Leskovec, Jure; Rajaraman, Anand; Ullman, Jeff (2014). Mining Massive Datasets, Cambridge University Press. Hromkovic, Jurj (2005). Design and Analysis of Randomized Algorithms, Springer. Support Sessions 2 hours a week with a teaching assistant. Grading Two midterm exams (10% each), homework assignments (40%), final exam (20%), integrative project (20%).