Algorithms and Data Structures - Spring 2020

news
  • Apr 19: The midterm exam will be similar to this set of exercises. Solve these exercises as a trial for the midterm exam. Read and follow the intsructions very carefully. We will discuss this set of exercises in class on Tuesday, April 21.
  • All announcements are recorded here.

    links
    Instructor: Antonio Carzaniga
    Assistants: Afrouz Jabalameli, Ioannis Mantas, Ali Fattaholmanan
    Type of course: lecture
    Lecture Hours: Tuesday 10:30–12:30 in SI-008, Thursday 10:30–12:30 in SI-008
    (1st year weekly schedule)
    Instructors' Office Hours: by appointment
    Assistants' Office Hours: by appointment

    Objectives

    Algorithms and data structures are fundamental to computer science, as they are the essence of computer programs. Also, the performance of any software system depends on the efficiency of its algorithms and data structures. Designing and analyzing algorithms is therefore crucial for the development of software systems. More generally, the study of algorithms provides insight into the nature of problems and their possible solutions, independent of programming language, programming paradigm, computer hardware, or any other implementation aspect. The objective of this course is to provide students with the knowledge and skills necessary to design and reason about algorithms, and to understand some of the most fundamental algorithms and data structures, their strengths and weaknesses, and their suitability in common contexts.

    Contents

    The course will cover basic notions of complexity, including asymptotic analysis of worst-case and average complexity, big-O, little-o, omega, and theta notation, polynomial reductions, poly-time verification vs. solution, NP and P complexity classes; general algorithm strategies such as brute force, greedy, divide-and-conquer, and dynamic programming; common algorithms, including elementary numeric computations, searching and sorting, elementary graph algorithms, and string matching; basic data structures, including stacks, queues, linked lists, and rooted trees; more advanced data structures, including B-trees, heaps, hash tables, and structures representing disjoint sets and dictionaries.

    Textbook

    Links

    Additional information is available through the following links and pages.

    this page is maintained by Antonio Carzaniga and was updated on April 19, 2020