Previous Lecture Lecture 20

Lecture 20, Thu 12/10

Wrap up / Review

Recorded Lecture: 12_10_20

Final Exam Review

'''
Final Exam Logistics
* The final exam will be on Gradescope as an online assignment.
* The window to take the final exam will start at 7:30pm and close
on 9:30pm PST on Wednesday 12/16
* The final exam will be cumulative
* The final exam will be in a similar format as the hws and quizzes
on Gradescope (except it'll be longer and cover more material)
   * True / False
   * multiple choice
   * given some code, write the output
   * write code satisfying a specification
   * short answers
   * ...
* The final exam must be done independently (no group work allowed)
* We will be monitoring Piazza during the final exam time
   * For any CLARIFYING questions, you may post a PRIVATE question
   on Piazza where we can provide an answer
   * If there needs to be a change / modification in any question,
   then I will post any clarifications publicly on Piazza
   (which will send everyone an email as well)

Topics
* Python Basics
   * Types
      * int, float, boolean, strings, lists, sets, dictionaries, ...
      * conversion functions (int(), float(), ...)
      * Mutable vs. Immutable types
   * Relational / Logical Operators (==, <, <=, >, >=, ...)
   * Python Lists
      * Supporting methods (count, pop, ...)
   * Understanding under-the-hood workings of dictionaries vs. lists
   * List / String slicing [ : ]
   * Strings
      * Supporting methods (replace, split, find, ...)
   * Function definitions
   * Control structures
      * if, else, elif, for, while

* Testing
   * Test Driven Development (TDD)
   * Writing pytests

* Python Errors
   * Syntax vs. Runtime

* Exceptions
   * Exception types (nameError, TypeError, ZeroDivisionError, ...)
   * Exception handling
      * Try / except / raise
      * Flow of execution
      * passing exceptions to the caller of the function
      * Catching multiple exceptions
      * Catching inherited type exceptions

* Object Oriented Programming
   * Defining our own Python classes and methods
   * Class constructors
      * Defining / initializing default parameters
   * Shallow vs. Deep Equality
      * overloading the __eq__ method
   * Overloading operators
      * __str__, __add__, __le__, __ge__, ...
   * Inheritance
      * Know the implementation details
      * Know what gets inherited and the mechanics
      * Know the pattern on how to construct inherited classes
      * Understand hierarchy of types (applies to exception handling)
      * Understand how to explicitly call super class' methods

* Algorithm Analysis and O-notation
   * Know how to derive O-notation for various data structures and code
   segments

* Binary Search
   * Search for items in a SORTED list
   * Know the implementation and O-notation

* Recursion
   * Understanding how recursive algorithms are managed by the call stack
   * How to write recursive solutions
   * How to analyze (O-notation) various recursive functions

* Linear Data Structures
   * Know implementation (as discussed in lecture / book) and O-notation
   for various functionality of data structures
      * Stacks, Queues, Deques, LinkedLists, Ordered Linked Lists

* Sorting Algorithms
   * Know the implementation and O-notation analysis (best and worst-case
   scenarios) of various sorting algorihtms
      * Bubble Sort (includes the "optimized" version), Selection Sort,
      Insertion Sort, Merge Sort, Quick Sort

* Trees
   * Understand terminology
   * Know minHeap / maxHeap data structure implementation and analysis, tree
   conceptualization, and underlygin Python list representation
   * Binary Trees
      * Know the nodes and references implementation
      * Tree traversals: pre, in, post order traversals
   * Binary Search Trees
      * BST property and how insertion order affects the structure
      * Understanding implementation on various BST methods (put, get, delete, ...)

Where to go from here?
   * At UCSB, there are CoE CS courses
      * CS 16 (intro to C++), CS 24 (data structures in C++),
      CS 32 (Object-Oriented programming in C++)
      * Upcoming DS major proposal, and there are programming courses dealing
      more with data science!
	  * Join clubs such as UCSB's Data Science Club
   * Work on projects!!
      * Helps with technical skills and expands you resume
      * Never let a course dictate what to learn!

Good luck!!!