CS51 - Fall 2009 - Lecture 38

  • http://www.xkcd.com/205/

  • Main parts to algorithm analysis
       - developing algorithms that work
       - making them faster
       - analyzing/understaning the efficiency/run-time

  • more sorting
       - Merge sort
          - first, look at the merge method
          - how can we use this method to sort numbers?
             - how could we use this method to sort two numbers?
             - can we repeat this idea?
       
          - what is the runtime?
             - look at layers

  • What if I wanted to sort something besides numbers, e.g. a particular object type?
       - What information do all of these sorting method leverage?
          - only leverage comparison between elements
       - Comparable interface
          - int compareTo(Object o)
             - x.compareTo(y) returns something < 0 if x < y
             - x.compareTo(y) returns 0 if x == y
             - x.compareTo(y) returns something > 0 if x > y
       - Some built in classes already implement Comparable
          - String

  • The easy way to sort in java:
       - Array.sort(Comparable[] a) - Quicksort
       - Collections.sort(List list) - Mergesort
          - e.g. ArrayList

  • Turing machines
       - an infinitely long strip of paper
       - you have a reader that can read/write over one entry on the strip of paper at a time
       - has a program that can only depend on that scanned symbol
       - you have internal "states"
       - turing machine functions by
          - based on the current state and the symbol under the reader
          - move to some different state
          - possibly write something to the strip of paper
          - transition to a state (possibly the same state)
       - functionality: can do anything a computer can do