Previous Lecture Lecture 20

Lecture 20, Thu 06/03

Wrap up / Review

Recorded Lecture: 6_3_21

Final Exam 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 at 6pm PST on Tuesday 6/8.
* The final exam will be cummulative (with an emphasis on latter topics).
* The final exam will be in a similar format as the homeworks and quizzes on
Gradescope (except it will be longer and cover more material).
    * True / False
    * Multiple Choice
    * Write code satisfying a certain specification
    * Short Answers (briefly define, explain, etc)
    * ...
* We will be monitoring Piazza during the final exam time.
    * For any CLARIFYING questions, you may post a PRIVATE question on Piazza where
    we will answer them.
    * If there needs to be a change / modification in any question, then we will
    post any clarifications publicly on Piazza (Piazza will send everyone an email)

Topics
* Python Basics
    * Types
        * int, float, boolean, strings, lists, sets, dictionaries, ...
        * conversion functions (int(), float(), str(), ...)
        * Mutable vs. Immutable
    * Relational / Logical Operators (==, <, <=, >=, >, and, or, ...)
    * Python Lists
        * Supporting methods (count, pop, ...)
    * Understand 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
    * pytests
* Python Errors
    * Syntax vs. Runtime
* Exceptions
    * Exception types (NameError, TypeError, ZeroDivisionError, ...)
    * Exception handling
        * try / except / raise
        * Flow of execution
        * pass exceptions to the function / method caller
        * Catching multiple exception types
        * Catching inherited exception types
* Object Oriented Programming
    * Defining Python Classes and methods
    * Class constructors
        * Defining / initializing default parameters
    * Shallow vs. Deep Equality
        * overloading __eq__ method
    * Overloading operators
        * __str__, __add__, __le__, __ge__, ...
    * Inheritance
        * Know the implementation and inheritance of fields and methods, and how
        to override inherited methods
        * Know the pattern on how to construct inherited classes
        * Understand the hierarchy of types (and also how this affects exception
        handling)
        * Understand how to explicitly call super / base class(es)' 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
    * Know implementations 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
    * Know implementation (as discussed in textbook / lecture) and O-notation for
    various functionality of data structures
        * Stacks, Queues, Deques, Linked Lists, and Ordered Linked Lists
* Sorting Algorithms
    * Know the implementation and O-notation analysis (best and worst-case scenarios)
    of various sorting algorithms
        * Bubble Sort (including optimized version), Selection Sort, Insertion Sort,
        Merge Sort, and Quick Sort
* Trees
    * Terminology
    * Know min / max heap data structure implementation (and underlying Python
    list representation)
    * Binary Trees
        * Know the nodes and references implementation
        * Tree traversals: pre, in, post order traversals
    * Binary Search Tree
        * Understanding the implementation, BST property, and how insertion order
        affects the structure
        * Understanding how various BST methods work (and its implementation) (put,
        get, deletion)