--- title: "Course Introduction" format: html: toc: true number-sections: true --- [In-class notes](hand_written_notes/IntroF24Class.pdf) ## Today's Information ### Learning Goals for Today - Define Algorithms - Understand course structure - Brainstorm group and learning strategies ### Announcements/Logistics - Office Hours: T/Th 12:30-1:30, 3:30-4:00 - Upcoming assignments - [Getting to know you quiz](https://middlebury.instructure.com/courses/14736/quizzes/36037) (due **today**) - [PSet Rough Draft](https://middlebury.instructure.com/courses/14736/assignments/271681) (due Sunday) - [Exit Ticket](https://middlebury.instructure.com/courses/14736/discussion_topics/194187) (due by 8am before Thursday's class) - Course assistant drop-in hours TBD - "What I did over the summer" ## What is an algorithm? **Definition:** An algorithms is a finite, clearly defined sequence of instructions for carrying out a task. ::: {.callout-tip appearance="simple"} ### ABCD Question Which of the following are algorithms? A) ``` Go to Cambridge ``` A) ```java int i=1; while(i<5){ i=i+1; } ``` A) > function Fib($i$) > >> Input: integer $i: i\geq 0$ >> >> Output: $i^{\textrm{th}}$ Fibonacci number > > If $i\in \{0,1\}$, then return $i$ > > Return Fib($i-1$)+Fib($i-2$) > A) ```java public static void fun(int j){ int k=1; k++; } ``` ::: ## Plan for the Semester We will look at 3 paradigms for designing algorithms: * Divide and Conquer * Greedy * Dynamic Programming For each algorithm, we will do the following: * Describe using pseudocode and/or java * 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. * Develop strategies to become a better learner and collaborator ### Learning and Collaborating The last learning goal of the course has nothing to do with algorithms: > Develop strategies to become a better learner and collaborator. > #### Learning Think of something you are good at. How did you get good at it? Did you ever make mistakes? What did you do when you made a mistake? Because learning is a process, and mistakes are one of the best ways to learn, I give you lots of opportunities to make mistakes: - Problem sets are graded on effort, not correctness - Quizzes and assessments have unlimited revisions based on feedback and credit/no-credit grading #### Group Work We will do group problem solving in class almost every period. This will help you learn course content - by trying to explain your thinking to others - by asking questions - by making mistakes It will also help you to learn to be a better team member and to meet lots of other cool CS students! I will always provide the solution in class after you've had a chance to work on it in groups. ::: {.callout-tip appearance="simple"} ## Group Exercise In groups we are going to brainstorm ways to manage challenges that arise in group work: - [go/CS302groups](https://docs.google.com/document/d/1JleYmKQP8q_7hb66PYlVnlGyC9vK82kLke6UbaSLL-g/edit#heading=h.r0xknoritz2k) :::