Previous Lecture Lecture 20

Lecture 20, Thu 03/11

Wrap up / Review

Recorded Lecture: 3-11-21

''' Logistics
* The final exam will be on Gradescope as an online assignment.
* THE WINDOW TO TAKE THE FINAL EXAM WILL START AT 4PM PST and CLOSE
ON 6PM PST on TUESDAY 3/16
* The final exam will be cummulative
* The final exam will be in a similar format as the hws and quizzes
(except it will be longer and cover more material).
    * True / False
    * Multiple Choice
    * Write code satisfying a certain specification
    * Short Answers (briefly define / explain)
    * ...
* For CLARIFYING questions, you may post a PRIVATE question on Piazza
where we will answer them
* If there needs to be a change / modification in the 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 function (int(), float(), ...)
        * Mutable vs. Immutable
    * Relational / Logical Operators (==, <, <=, >=, >, ...)
    * Python Lists
        * Supporting methods (count, pop, ...)
    * 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
    * TDD
    * Writing pytests
* Python Errors
    * Syntax vs. Runtime Errors
    * Exceptions
        * Exception types (nameError, TypeError, ZeroDivisionError, ...)
        * Exception handling
            * Try / except / raise
            * Flow of execution
            * passing exceptions to the function / method caller
            * Catching multiple exceptions
            * Catching inherited type exceptions
* Object Oriented Programming
    * Defining Python classes and methods
    * Class constructors
        * Defining  / initializing default parameters
    * Shallow vs. Deep Equality
        * Overload __eq__ method
    * Overloading operators with special methods
        * __str__, __add__, __le__, __ge__, ...
    * Inheritance
        * Knowing the implementation and inheritance of fields and
        methods, and how to override inherited methods
        * Know the pattern on how to construct inherited classes
        * Know the hierarchy of types (also how this affects
        exception handling)
        * Know how to explicitly call super class' methods
* Algorithm Analysis and O-Notation
    * Know how to derive the O-notation for various data structures
    and code segments
* Binary Search
    * Search for items in a SORTED list
    * Covered iterative and recursive implementation and O-notation
* Recursion
    * Understand how recursive algorithms are managed by the call
    stack
    * Able to derive O-notation for various recursive functions
* Linear Data Structures
    * the implementation and O-notation analysis (best and worst-case
    scenarios) for various functionality of data structures
        * Stacks, Queues, Deques, Linked Lists, Ordered Linked Lists
* Sorting Algorithms
    * Know the implementation and O-notation analysis (best and worst-
    case scenarios) of various sorting algorithms
        * Bubble Sort (included optimized version), Selection Sort,
        Insertion Sort, Merge Sort, and Quick Sort
* Trees
    * Terminology
    * Min / Max heap data structure implementation (and underlying
    Python List representation)
    * Binary Trees
        * Node / references implementation
        * Tree traversals: pre, in, post order traversals
    * Binary Search Trees
        * Understand BST property and how insertion order affects
        the structure
        * Understand various BST methods (put, get, deletion)

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 and have a great spring break!!!
'''