---
title: "Course Introduction"
format:
  html:
    toc: true
    number-sections: true
---
[Pre-class notes](hand_written_notes/IntroClass.pdf)

[Class notes](hand_written_notes/IntroPost1.pdf)

## Today's Information

### Learning Goals for Today

- Define Algorithms
- Understand course structure
- Brainstorm group and learning strategies
 

## What is an algorithm?

**Definition:** An algorithm is a finite, clearly defined sequence of instructions for carrying out a task.

You've seen algorithms in nearly every CS class! So what makes this class different? Our focus will be on learning sophisticated techniques for creating *fast* algorithms.


## Plan for the Semester

We will look at 3 paradigms for designing algorithms:

* Divide and Conquer
* Greedy
* Dynamic Programming

For most algorithms, we will do the following:

* Describe using pseudocode
* Prove correctness
* Analyze the asymptotic runtime
* Consider ethical implications of implementing in a particular domain

We will also study NP-completeness, which is a particular way of trying to understand and compare the difficulty of problems

### Learning Goals


* Describe, design, and implement algorithms using the following paradigms: Divide and Conquer, Dynamic Programming, and Greedy.
* Prove correctness of algorithms using inductive proofs and exchange arguments.
* Analyze the runtime of algorithms. Analyze expected runtime of randomized algorithms using linearity of expectation and indicator variables.
* Describe ethical implications of algorithms.
* Create reductions from one problem to another and explain why reductions are important.
* Understand the importance of NP-completeness, and be able to prove a problem is NP-complete.


## Learning in this Class

### Learning Loop

::: {.callout-tip appearance="simple"}
## Think-Pair-Share
* When you make a mistake, or even fail, what helps you to try again? What self-talk stops you from giving up, and makes you enthusiastic to try again? (Think about failures in social situations, academics, sports, art, etc.)
:::

You will almost certainly not achieve every learning target on the first try. You will fail. Sometimes multiple times. This does not mean you are a failure! It means you are still learning. (Sometimes it means you are not effectively learning.)

Learning is a cyclical process that involves 

1. Trying something (new)
2. Getting feedback (either from an expert or from analyzing your mistakes)
3. Repeat!

Therefore, is it critical that you have the opportunity to make mistakes and get feedback before having to demonstrate skills

- Problem sets are graded on effort, not correctness
- Multiple chances to demonstrate skills