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
E-mailmanuela.fischer@inf.ethz.ch
URLhttp://people.inf.ethz.ch/fiscmanu/
DepartmentComputer Science
RelationshipLecturer

NumberTitleECTSHoursLecturers
252-0002-AALData Structures and Algorithms Information
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 credits15RM. Fischer, F. Friedrich Wicker
AbstractThe 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 objectiveAn 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.
ContentData 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 / NoticePrerequisites:
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.
CompetenciesCompetencies
Subject-specific CompetenciesConcepts and Theoriesassessed
Techniques and Technologiesassessed
Method-specific CompetenciesAnalytical Competenciesassessed
Decision-makingfostered
Media and Digital Technologiesfostered
Problem-solvingassessed
Personal CompetenciesCreative Thinkingassessed
Critical Thinkingfostered
252-0002-00LData Structures and Algorithms Information 8 credits4V + 2UM. Fischer, F. Friedrich Wicker
AbstractThe 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 objectiveAn 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.
ContentData 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 / NoticePrerequisites:
Lecture Series 252-0835-00L Informatik I or equivalent knowledge in programming with C++.
CompetenciesCompetencies
Subject-specific CompetenciesConcepts and Theoriesassessed
Techniques and Technologiesassessed
Method-specific CompetenciesAnalytical Competenciesassessed
Decision-makingfostered
Media and Digital Technologiesfostered
Problem-solvingassessed
Personal CompetenciesCreative Thinkingassessed
Critical Thinkingfostered
252-0842-00LIntroduction to Programming and Problem Solving3 credits2V + 1UD. Komm, M. Dahinden, M. Fischer
AbstractCore concepts of Computer Science and their implementation in Python.
Learning objectiveThe 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 notesLecture website: https://moodle-app2.let.ethz.ch/course/view.php?id=19344
LiteratureThe slides will be available for download on the course website.
Prerequisites / NoticeRecommendation:
- Foundations of Computer Science (252-0852-00)
- Application Oriented Programming Using Python (252-0840-01)
CompetenciesCompetencies
Subject-specific CompetenciesConcepts and Theoriesassessed
Techniques and Technologiesassessed
Method-specific CompetenciesAnalytical Competenciesassessed
Problem-solvingassessed
Social CompetenciesCommunicationfostered
Cooperation and Teamworkfostered
Self-presentation and Social Influence fostered
Personal CompetenciesCreative Thinkingassessed
Critical Thinkingassessed
Self-awareness and Self-reflection fostered
Self-direction and Self-management fostered
252-0846-AALComputer Science II Information
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 credits9RC. Cotrini Jimenez, M. Fischer
AbstractThis 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 objectiveBased 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.
ContentIntroduction 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 notesThe slides will be available for download on the course home page.
LiteratureT. Cormen, C. Leiserson, R. Rivest, C. Stein, Introduction to Algorithms , 3rd ed., MIT Press, 2009
Prerequisites / NoticePreliminaries: course 252-0845 Computer Science or equivalent knowledge in programming.
252-0846-00LComputer Science II Information 4 credits2V + 2UM. Fischer, C. Cotrini Jimenez
AbstractThis 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 objectiveBased 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.
ContentIntroduction 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 notesThe slides will be made available for download on the course website.
LiteratureT. Cormen, C. Leiserson, R. Rivest, C. Stein, Introduction to Algorithms , 3rd ed., MIT Press, 2009
Prerequisites / NoticePreliminaries: 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.