Algorithms and Data Structures - Spring 2021
news
All announcements are recorded here.
Instructor:
Antonio Carzaniga
Assistants:
Mojtaba Eslahi Kelorazi,
Luca Surace,
Morteza Rezaalipour.
Type of course: lecture
Lecture schedule: Tuesday 8:30–10:30, Thursday 8:30–10:30
(see the
weekly class schedule for details)
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.