# Hard Problems --- CS 65 // 2021-05-06 ## Final Project - Implementation due **Friday, May 14th at 5pm** ## Project Demo - **When**: Thursday, May 13th at 9:30exam CT - **Where**: Zoom - Every group will prepare a demonstration of their project on a laptop - Live demonstrations are preferable, but a presentation with slides is also sufficient - Think of it as a **poster presentation** where peers can stop by, ask you questions, see a demo, and discuss challenges you've encountered, etc. ## Project Demo - When you are demoing your project, be prepared to: + Give a short **elevator pitch** of your project which includes the theme, goals, and how far you are now in your project + Give a live demonstration or slides demonstrating what the visuals would look like / how the user would interact / etc. - Only half of the groups will be demoing at a time + When you are not demoing, your job is to visit every other project + Ask questions, give constructive feedback # Questions ## ...about anything? # Measuring Efficiency ## Various Sorting Algorithms
## Analyzing Efficiency - Two most common metrics for efficiency: - **Time Complexity** + How much "time" it takes for an algorithm to complete + Usually measured in "number of basic steps" the algorithm takes - **Space Complexity** + How much "memory" the algorithm uses while it is working ## Big Oh Notation - Counting the number of steps *exactly* is cumbersome - Big Oh notation allows us to specify time complexity neatly by ignoring all aspects except the fastest part - **Constant Time**: $O(1)$ - **Logarithmic Time**: $O(\log(n))$ - **Linear Time**: $O(n)$ - **Quadratic Time**: $O(n^2)$ - **Exponential Time**: $O(2^n)$ # Fibonacci Sequence ## Fibonacci Sequence - The **Fibonacci sequence** is a recursively defined sequence of numbers that shows up everywhere + Branching of trees, flower pedals, ... - It is defined by the recursion: + $f(0) = 1$ + $f(1) = 1$ + $f(n) = f(n-1) + f(n-2)$ - Yields the sequence: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ... # Hard Problems # Reflections
on CS 65 ## CS 65: Learning Goals - **Problem Solving** + How to *think carefully* about computational problems + How to work towards a *solution* + How to *assess* solutions to the problem - **Computer Science:** Algorithms and Data Structures + How we represent and process data to solve problems ## CS 65: Learning Goals - **Program and Software Design** + How to build software, or build better software - **General Thinking Skills** + Skills/approaches that you can apply in other situations # What's next? ## Computer Science Core - CS 65: Introduction to Computer Science I - CS 66: Introduction to Computer Science II - CS 67: Object-Oriented Programming - CS 130: Computer Organization and Assembly Language Programming - MATH 054: Discrete Mathematics - CS 137: Algorithms - CS 191: The Capstone Course ## Computer Science Electives - CS 135: Programming Languages - CS 139: Theory of Computation - CS 143: Artificial Intelligence - CS 147: Computer Graphics - CS 160: Operating Systems - CS 167: Machine Learning - ... and many more! # Course Evaluations