Manuela Fischer: Catalogue data in Spring Semester 2023 |
Name | Dr. Manuela Fischer |
Address | Lehre D-INFK ETH Zürich, CAB H 33.1 Universitätstrasse 6 8092 Zürich SWITZERLAND |
Telephone | +41 44 632 74 61 |
manuela.fischer@inf.ethz.ch | |
URL | http://people.inf.ethz.ch/fiscmanu/ |
Department | Computer Science |
Relationship | Lecturer |
Number | Title | ECTS | Hours | Lecturers | |||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
252-0002-AAL | Data Structures and Algorithms Enrolment ONLY for MSc students with a decree declaring this course unit as an additional admission requirement. Any other students (e.g. incoming exchange students, doctoral students) CANNOT enrol for this course unit. | 8 credits | 15R | M. Fischer, F. Friedrich Wicker | |||||||||||||||||||||||||||||||||||
Abstract | The course provides the foundations for the design and analysis of algorithms. Classic problems ranging from sorting up to problems on graphs are used to discuss common data structures, algorithms and algorithm design paradigms. The course also comprises an introduction to parallel and concurrent programming and the programming model of C++ is discussed in some depth. | ||||||||||||||||||||||||||||||||||||||
Learning objective | An understanding of the analysis and design of fundamental and common algorithms and data structures. Deeper insight into a modern programming model by means of the programming language C++. Knowledge regarding chances, problems and limits of parallel and concurrent programming. | ||||||||||||||||||||||||||||||||||||||
Content | Data structures and algorithms: mathematical tools for the analysis of algorithms (asymptotic function growth, recurrence equations, recurrence trees), informal proofs of algorithm correctness (invariants and code transformation), design paradigms for the development of algorithms (induction, divide-and-conquer, sweep-line method, backtracking and dynamic programming), classical algorithmic problems (searching, selection and sorting), data structures for different purposes (linked lists, hash tables, balanced search trees, quad trees, heaps, union-find), further tools for runtime analysis (e.g. amortized analysis). The relationship and tight coupling between algorithms and data structures is illustrated with geometric problems (convex hull, line intersections, closest point pairs) graph algorithms (traversals, topological sort, transitive closure, shortest paths, minimum spanning trees, max flow). Programming model of C++: correct and efficient memory handling, generic programming with templates, functional approaches with functors and lambda expressions. Parallel programming: concepts of parallel programming (Amdahl's and Gustavson's laws, task/data parallelism, scheduling), problems of concurrency (data races, bad interleavings, memory reordering), process synchronisation and communication in a shared memory system (mutual exclusion, semaphores, monitors, condition variables), progress conditions (freedom from deadlock, starvation). The concepts provided in the course are motivated and illustrated with practically relevant algorithms and applications. Exercises are carried out in Code-Expert, an online IDE and exercise management system. All required mathematical tools above high school level are covered, including a basic introduction to graph theory. | ||||||||||||||||||||||||||||||||||||||
Literature | (available on the course website) | ||||||||||||||||||||||||||||||||||||||
Prerequisites / Notice | Prerequisites: Lecture Series 252-0856-00L Computer Science or equivalent knowledge in programming with C++. Please note that this is a self study (virtual) course, which implies that (in the autumn semester) there are no physical lectures or exercise sessions offered. If you want to attend the real course, please go to 252-0002-00L in the spring semester. | ||||||||||||||||||||||||||||||||||||||
Competencies |
| ||||||||||||||||||||||||||||||||||||||
252-0002-00L | Data Structures and Algorithms | 8 credits | 4V + 2U | M. Fischer, F. Friedrich Wicker | |||||||||||||||||||||||||||||||||||
Abstract | The course provides the foundations for the design and analysis of algorithms. Classic problems ranging from sorting up to problems on graphs are used to discuss common data structures, algorithms and algorithm design paradigms. The course also comprises an introduction to parallel and concurrent programming and the programming model of C++ is discussed in some depth. | ||||||||||||||||||||||||||||||||||||||
Learning objective | An understanding of the analysis and design of fundamental and common algorithms and data structures. Deeper insight into a modern programming model by means of the programming language C++. Knowledge regarding chances, problems and limits of parallel and concurrent programming. | ||||||||||||||||||||||||||||||||||||||
Content | Data structures and algorithms: mathematical tools for the analysis of algorithms (asymptotic function growth, recurrence equations, recurrence trees), informal proofs of algorithm correctness (invariants and code transformation), design paradigms for the development of algorithms (induction, divide-and-conquer, sweep-line method, backtracking and dynamic programming), classical algorithmic problems (searching, selection and sorting), data structures for different purposes (linked lists, hash tables, balanced search trees, quad trees, heaps, union-find), further tools for runtime analysis (e.g. amortized analysis). The relationship and tight coupling between algorithms and data structures is illustrated with geometric problems (convex hull, line intersections, closest point pairs) graph algorithms (traversals, topological sort, transitive closure, shortest paths, minimum spanning trees, max flow). Programming model of C++: correct and efficient memory handling, generic programming with templates, functional approaches with functors and lambda expressions. Parallel programming: concepts of parallel programming (Amdahl's and Gustavson's laws, task/data parallelism, scheduling), problems of concurrency (data races, bad interleavings, memory reordering), process synchronisation and communication in a shared memory system (mutual exclusion, semaphores, monitors, condition variables), progress conditions (freedom from deadlock, starvation). The concepts provided in the course are motivated and illustrated with practically relevant algorithms and applications. Exercises are carried out in Code-Expert, an online IDE and exercise management system. All required mathematical tools above high school level are covered, including a basic introduction to graph theory. | ||||||||||||||||||||||||||||||||||||||
Literature | (available from the course website) | ||||||||||||||||||||||||||||||||||||||
Prerequisites / Notice | Prerequisites: Lecture Series 252-0835-00L Informatik I or equivalent knowledge in programming with C++. | ||||||||||||||||||||||||||||||||||||||
Competencies |
| ||||||||||||||||||||||||||||||||||||||
252-0842-00L | Introduction to Programming and Problem Solving | 3 credits | 2V + 1U | D. Komm, M. Dahinden, M. Fischer | |||||||||||||||||||||||||||||||||||
Abstract | Core concepts of Computer Science and their implementation in Python. | ||||||||||||||||||||||||||||||||||||||
Learning objective | The goals of the course are consolidating the knowledge about the programming language Python on the one hand, and learning about core concepts of computer science that are essential in algorithm design on the other hand. The focus is on computational thinking, that is, the ability to solve problems systematically by developing algorithms. Different strategies are introduced, analyzed theoretically, and implemented in Python. The combination of theory and practice is central in this course. | ||||||||||||||||||||||||||||||||||||||
Content | - Repetition of basic programming concepts such as variables, lists, control structures, and loops - Reading in and visualizing data - Complexity theory - Sorting and searching - Dynamic programming - Recursion - Graph algorithms | ||||||||||||||||||||||||||||||||||||||
Lecture notes | Lecture website: https://moodle-app2.let.ethz.ch/course/view.php?id=19344 | ||||||||||||||||||||||||||||||||||||||
Literature | The slides will be available for download on the course website. | ||||||||||||||||||||||||||||||||||||||
Prerequisites / Notice | Recommendation: - Foundations of Computer Science (252-0852-00) - Application Oriented Programming Using Python (252-0840-01) | ||||||||||||||||||||||||||||||||||||||
Competencies |
| ||||||||||||||||||||||||||||||||||||||
252-0846-AAL | Computer Science II Enrolment ONLY for MSc students with a decree declaring this course unit as an additional admission requirement. Any other students (e.g. incoming exchange students, doctoral students) CANNOT enrol for this course unit. | 4 credits | 9R | C. Cotrini Jimenez, M. Fischer | |||||||||||||||||||||||||||||||||||
Abstract | This course provides the foundations of programming and working with data. Computer Science II particularly stresses code efficiency and provides the basis for understanding, design, and analysis of algorithms and data structures. In terms of working with data, foundations required for understanding experimental data and notation and basic concepts for machine learning are covered. | ||||||||||||||||||||||||||||||||||||||
Learning objective | Based on the knowledge covered by the lecture Computer Science I, the primary educational objective of this course is the constructive knowledge of data structures and algorithms. After successfully attending the course, students have a good command of the mechanisms to construct a program in Python and to work with multidimensional data using Python libraries. Students particularly understand how an algorithmic problem can be solved with a sufficiently efficient computer program. Secondary educational objectives are formal thinking, the power of abstraction, and appropriate modeling capabilities. | ||||||||||||||||||||||||||||||||||||||
Content | Introduction of Python: from Java to Python, advanced concepts and built-in data structures in Python; parsing data, operating on data using Numpy and visualization using Matplotlib; linear regression, classification and (k-means) clustering, mathematical tools for the analysis of algorithms (asymptotic function growth, recurrence equations, recurrence trees), classical algorithmic problems (searching, selection and sorting), design paradigms for the development of algorithms (divide-and-conquer and dynamic programming), data structures for different purposes (linked lists, trees, heaps, hash-tables). The relationship and tight coupling between algorithms and data structures is illustrated with graph algorithms (traversals, topological sort, closure, shortest paths). In general, the concepts provided in the course are motivated and illustrated with practically relevant algorithms and applications. Exercises are carried out in Code-Expert, an online IDE and exercise management system. Programming language used in this course is Python. | ||||||||||||||||||||||||||||||||||||||
Lecture notes | The slides will be available for download on the course home page. | ||||||||||||||||||||||||||||||||||||||
Literature | T. Cormen, C. Leiserson, R. Rivest, C. Stein, Introduction to Algorithms , 3rd ed., MIT Press, 2009 | ||||||||||||||||||||||||||||||||||||||
Prerequisites / Notice | Preliminaries: course 252-0845 Computer Science or equivalent knowledge in programming. | ||||||||||||||||||||||||||||||||||||||
252-0846-00L | Computer Science II | 4 credits | 2V + 2U | M. Fischer, C. Cotrini Jimenez | |||||||||||||||||||||||||||||||||||
Abstract | This course provides the foundations of programming and working with data. Computer Science II particularly stresses code efficiency and provides the basis for understanding, design, and analysis of algorithms and data structures. | ||||||||||||||||||||||||||||||||||||||
Learning objective | Based on the knowledge covered by the lecture Computer Science I, the primary educational objective of this course is the constructive knowledge of data structures and algorithms. After successfully attending the course, students have a good command of the mechanisms to construct a program in Python and to work with multidimensional data using Python libraries. Students particularly understand how an algorithmic problem can be solved with a sufficiently efficient computer program. Secondary educational objectives are formal thinking, the power of abstraction, and appropriate modeling capabilities. In the course "Computer Science II", the competencies of programming, modeling and data analysis & interpretation are taught, applied and examined. | ||||||||||||||||||||||||||||||||||||||
Content | Introduction of Python: from Java to Python, advanced concepts and built-in data structures in Python; parsing data, operating on data using Numpy and visualization using Matplotlib; mathematical tools for the analysis of algorithms (asymptotic function growth, recurrence equations, recurrence trees), classical algorithmic problems (searching, selection and sorting), design paradigms for the development of algorithms (divide and conquer and dynamic programming), data structures for different purposes (linked lists, trees, heaps, hash tables). The relationship and tight coupling between algorithms and data structures are illustrated with graph algorithms (traversals, topological sort, shortest paths, minimum spanning tree, maximum flow) and geometric algorithms (scanline). In general, the concepts provided in the course are motivated and illustrated with practically relevant algorithms and applications. Exercises are carried out in Code Expert, an online IDE and exercise management system. The programming language used in this course is Python. | ||||||||||||||||||||||||||||||||||||||
Lecture notes | The slides will be made available for download on the course website. | ||||||||||||||||||||||||||||||||||||||
Literature | T. Cormen, C. Leiserson, R. Rivest, C. Stein, Introduction to Algorithms , 3rd ed., MIT Press, 2009 | ||||||||||||||||||||||||||||||||||||||
Prerequisites / Notice | Preliminaries: course 252-0845 Computer Science or equivalent knowledge in programming. All required mathematical tools above high school level are covered, including a basic introduction to graph theory. |