--- title: "Course Introduction" format: html: toc: true number-sections: true --- [In-class notes](hand_written_notes/intro.pdf) ## Today's Information ### Learning Goals for Today - Define Algorithms - Understand course structure - Brainstorm group and learning strategies ### Announcements/Logistics - Apply to do research with CS profs in the summer: - Fill out application at [go/cs_summer_research](https://docs.google.com/forms/d/e/1FAIpQLSeGukYaUBHg4ngFvSvaAR7IorsSK6z36ND4iEqlfuXOHlt0xg/viewform) - E-mail profs to set up a time to talk to them about their research - Office hours (this week only), Th 2:30-4pm, Fr 9-10:30 - Upcoming assignments - [Getting to know you quiz](https://middlebury.instructure.com/courses/14189/quizzes/32848) (due **today**) - [PSet Rough Draft](https://middlebury.instructure.com/courses/14189/assignments/255304) (due Thursday) - [Participation Check-in](https://middlebury.instructure.com/courses/14189/assignments/257121) - Suggested Deadline Schedule | Monday | Thursday | | ------ | -------- | | pset | pset rough draft| |participation check-in | pset self-assessment| | | quiz| - Tutoring hours?? ## What is an algorithm? **Definition:** An algorithms is a finite, clearly defined sequence of instructions for carrying out a task. 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 and Collaborating The first 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 exams have unlimited revisions 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. In groups we are going to brainstorm ways to manage challenges that arise in group work. See - [go/CS302A_groups](https://docs.google.com/document/d/1ID53Xfdt1FqBjlVwRLkW2VPYwQm_j8TCSRzEGv4RT1I/edit?pli=1#heading=h.r32eeg1akgfx) - [go/CS302B-groups](https://docs.google.com/document/d/1VXEKL1niznMRLrr4S1Xw9erWxgy-IRfH7n4fjXKvZk4/edit#heading=h.r32eeg1akgfx)