CS51 - Fall 2009 - Lecture 37

  • administrative
       - put up practice final
       - our final time slot is Dec. 18 at 9 a.m.
       - TP2 is due last day of class at 3:30pm
       - Schedule for the rest of the semester
          - Monday: sorting, turing machines, misc.
          - Wednesday: review

  • show demo (again) for Pictionary

  • "For me, great algorithms are the poetry of computation. Just like verse, they can be terse, allusive, dense and even mysterious. But once unlocked, they cast a brilliant new light on some aspect of computing.'' -- Francis Sullivan

  • What is an algorithm?
       - way for solving a problem
       - method of steps to accomplish a task

  • Examples
       - sort a list of numbers
       - find a route from one place to another (cars, packet routing, phone routing, ...)
       - find the longest common substring between two strings
       - add two numbers
       - microchip wiring/design (VLSI)
       - solving sudoku
       - cryptography
       - compression (file, audio, video)
       - spell checking
       - pagerank
       - classify a web page
       - ...

  • Sorting (all code for sorting algorithms found here
       Input: An array of numbers nums
       Output: The array of numbers in sorted order, i.e. nums[i] <= nums[j] for all i < j

       - cards
          - sort cards: all cards in view
          - sort cards: only view one card at a time
       
       - Selection sort
          - What is the running time? How many operations?
             - We'll use the variable n to describe the length of the array
             - what is the running time of indexOfSmallest?   
                - end_index - start_index + 1
             - how many times is it called?
                - n - 1 times
             - what is the overall cost for selectionSort?
                - indexOfSmallest
                   - n-1
                   - n-2
                   - n-3
                   - ...
                   - 1
                   - \sum_{i = 1}^{n-1} i = ((n-1)n)/2s
       - Insertion sort
          - what is the running time?
             - How many times do we iterate through the while loop?
                - in the best case: no times
                   - when does this happen?
                   - what is the running time? linear
                - in the worst case: j - 1 times
                   - when does this happen?
                   - what is the running time?
                      - \sum_{j=1}^n-1 j = ((n-1)n)/2
                      - quatratic
                - average case: (j-1)/2 times

       - asymptotic analysis
          - Precisely calculating the actual steps is tedious and not generally useful
          - Different operations take different amounts of time. Even from run to run, things such as caching, etc. will complicate things
          - Want to identify categories of algorithmic runtimes
          - Compare different algorithms
             - f1(n) takes n^2 steps
             - f2(n) takes 2n + 100 steps
             - f3(n) takes 4n + 1 steps
          - Which algorithm is better? Is the difference between f2 and f3 impor-
    tant/significant?
          - runtimes table

          - Three common notations to talk about run-times
             - Big-O: O(g(n))
                - A function, f(n) is Big-O of g(n) if eventually (asymptotically, i.e. for large enough inputs) f(n) is always UPPER bounded (<) by some constant times g(n)
                - gives us an upper bound on the function
             - Omega(g(n))
                - A function, f(n) is Omega of g(n) if eventually (asymptotically, i.e. for large enough inputs) f(n) is always LOWER bounded (<) by some constant times g(n)
             - Theta(g(n)
                - Both upper and lower bounded

             - Gives us the big picture, without worrying about details

       - What is the running time of Insertion sort?
          - O(n^2)
          - why Big-O?