## Översikt

• ### Allmänt

This course will be held completely online.
All information and the materials related to the course can be found in A+.

An algorithm is a finite sequence of elementary instructions for accomplishing a well-defined task. A single CPU core today can easily execute billions of elementary instructions per second, which makes efficient algorithms both immensely powerful tools in practice and a subject of considerable mathematical intrigue: Which well-defined tasks can be solved efficiently? What is the most efficient algorithm to accomplish a particular task?

This course will advance your understanding in the basic principles and fundamental challenges in computing.  We analyze problems, where we can rigorously argue that a certain algorithm design is good (or bad). The focus is on proving mathematically that certain approaches do (or do not) work. Furthermore, we learn mathematical principles that form the basis for a large number of algorithm designs and their analysis, as well as in select cases turn these into concrete algorithm implementations and measure their performance.

There are no formal pre-requisites for the course, but basic knowledge in discrete mathematics as well as basic programming skills are essential. The course is suitable for students at all levels (bachelor, master, and doctoral) who are interested in expanding their knowledge in algorithms.

#### Course staff

Lecturer
Jara Uitto     http://jarauitto.com

Teaching assistants
Angeline Jayanegara
Etna Lindy
Phi Dang
Rustam Latypov
Shreyas Pai

#### Course material

The material of the course is based in the A+ system: https://plus.cs.aalto.fi/CS-E3190/2021/

#### Learning objectives

1. Modeling: The students are able to derive mathematically well-defined problems from a given real-life problem.
2. Design: The students are able to design algorithms using basic algorithmic tools.
3. Analysis: The students are able to rigorously analyse the correctness and runtime of an algorithm.
4. Implementation: The students are able to implement fundamental algorithms. The main focus of the course is in the first 3 items of this list. However, in the ideal case, a beautiful algorithm design is complemented by a great implementation.

• ### Material

Sessions and the Online Implementation

Kick-off lecture: On the 17th of September, there is a kick-off (live) lecture on Zoom. The link will be distributed on the week of the kick-off lecture.

Recorded lectures: Besides the kick-off lecture, all lectures will be recorded videos. The links to the videos will be shared in the beginning of the corresponding week. For questions related to the lectures, see Slack instructions below.

For each week, we will create a Slack channel where students can ask questions related to the week. During the lecture Q&A times (Friday 14:15 - 16:00), we will host a Zoom call to answer questions posed in the Slack. In case questions pop up later, we encourage the students to support each other with answers.

Types of exercises: There are three different types of exercises.

1. Tutorial exercises: For each topic, we will have several tutorial exercises that help students to better understand the topic. They are not a prerequisite but are intended to support in solving the graded exercises and the programming exercises. These exercises are discussed weekly in the exercise sessions.
2. Graded exercises: For each topic/week, there is one graded exercise with a few sub-tasks. In total, there are ten graded exercises and each graded exercise  grants up to 10 points. These exercises can be found in and are submitted through the A+ system. The deadlines are roughly 2 weeks after the corresponding topic and we reserve two weeks for performing the grading. All submissions must be done in PDF form. We recommend using LaTeX. Handwritten solutions (in PDF) are accepted but in case we are unable to read your handwriting, we will grant 0 points.
3. Programming exercises: There are 4 programming exercises, that can be found in and submitted through the A+ system. The programming language is C++. The exercises are automatically graded based on the correctness and efficiency of your solution. If you feel insecure about the C++ programming language, we point out that the course requires a minimal understanding of the details of the C++ language itself and asking for help is allowed (within the scope of the code of conduct).

Late submissions:
Late submissions, graded and programming exercises, will result in 0 points.

Communication through Slack (and Zoom):
To create an account in our Slack chat, please follow this link. Just enter your aalto.fi email address, and follow the instructions. The Slack space is created for convenient communication and is not required for completing the course.

We will have a separate channel for each lecture week and for each programming exercise. The corresponding channel will focus on the topic/exercise at hand. The channels act as a general forum for questions and answers, by either fellow students or the teaching staff. There are (at least) four special channels:
#generalIs intended for any general discussion related to the course
#queue: During the exercise sessions, you can request for 1-on-1 help here
#feedback: Any sort of feedback is welcome

Each teaching assistant and the responsible teacher will have an account in the Slack. However, do not post direct messages to us, unless you have requested 1-on-1 help through the #queue channel during an exercise session.

#### Working on the exercises (and on this course)

A big part of this course is to obtain individual skills in algorithm design, analysis, and implementation. Hence, everyone should write their solutions to all of the exercises themselves. Please see the Code of Conduct for this course for more details.

The code is by no means intended to forbid working with your peers. In particular now with the Corona induced isolation, we want to encourage working with other students and peer support. To make this explicit, we offer a small amount of extra points for each student that provided help to a peer in some exercise. This will not be controlled, we hope that it simply makes it explicit that helping others is not a bad thing. Just make sure to follow the code of conduct.

1. Graded homework: Each graded homework is worth 10 points, 100 points in total
2. Programming Exercises: Each programming exercise is worth 10 points, 40 points in total. There is a warm-up programming exercise worth 3 points.
3. Extra points: Answering each feedback, one per lecture, gives 1 point and exercise help gives 2, in total 12 points
4. Total points: 155
The specific grades are obtained as follows
• Grade 5: At least 115 points
• Grade 4: At least 105 points
• Grade 3: At least 95 points
• Grade 2: At least 85 points
• Grade 1: At least 75 points

#### Course Schedule

Exercise Sessions and Lecture Q&A
MondayTuesdayWednesday Thursday Friday
Lecture published  12:00
Exercise14:15-16:0014:15-16:00--
Lecture Q&A     14:15-16:00

• ### Exercise Sessions

There are two tutorial exercise sessions each week. In these sessions, you can ask questions and get 1-on-1 help with your exercises. In the exercise sessions, a TA presents and discuss the tutorial exercises and their solutions and the students have the chance to ask questions related to the exercises

There are two ways to obtain help:

• Slack: You can initiate a help request (details below) and afterwards, communicate with a TA using direct messages in Slack.
• Zoom: You can host a video conference with a TA

In the #queue channel in slack, you can initiate a help request during an exercise session. In your request, you should give a short description of your issue (below some more instructions). Once there is a TA available, your request will be marked and the TA will contact you.

### Help with Slack

• Go to the #queue channel in Slack.
• Write a help request message that starts with the keyword "slack". Your help request should consist of a few sentences that describe what is the problem, what you know, and what you have already tried. You can also make a pointer (e.g., link) to a relevant part of the course material.
• A TA will contact you through direct messages in Slack and assist you with your problem.

#### Help with Zoom

• To install Zoom, follow these instructions. Please make sure that your audio settings work in the call.
• Create a Zoom meeting and copy the URL.
• Go to the #queue channel in Slack
• Write a help request message that starts with the keyword "Zoom" and append the URL of the call invitation.
• Once a TA is available, he/she will join your call.

#### Help with graded and programming exercises

Since these exercises are graded, we will not solve these together with the students. However, if something is unclear, TAs and fellow students can be contacted for clarification.

• ### The Code of Conduct

The following code of conduct applies at this course.

• The programming exercises are personal and confidential assignments.  In particular, producing program text together, copying program text from others, or making personal solutions available to others (either  privately or by posting to some shared or public forum) is not allowed.
• Discussing general algorithmic concepts and techniques with fellow students is of course allowed, even encouraged, as long as the level of detail is abstract enough so that the submitted programming exercise solutions of the participating students do not start to look similar.
• If you help someone, help him/her to understand the topic at hand, not just how to pass the assignment and get the points.
• Submissions to the online services at this course should directly involve the coursework at this course; that is, the exercises or examples related to the exercises at this course. Any other use of the services is not allowed.

Violations of this code of conduct can have consequences affecting your coursework at this course as well as your studies at Aalto University.
Further information is available at the Aalto University Code of Academic Integrity.