Top Banner
CS 121 Week 12 - Wednesday
43

Week 12 - Wednesday. What did we talk about last time? Hunters and prey Class variables Big Oh notation.

Dec 16, 2015

Download

Documents

Cameron Hood
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

CS 121Week 12 - Wednesday

Page 2: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

Last time

What did we talk about last time? Hunters and prey Class variables Big Oh notation

Page 3: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

Questions?

Page 4: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

Project 4

Page 5: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

Big Oh Notation

Page 6: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

Mathematical description

We want to compare the running time of one program to another

We want a mathematical description with the following characteristics: Worst case

We care mostly about how bad things could be

AsymptoticWe focus on the behavior as the input size gets larger and larger

Page 7: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

Big Oh notation

Enter Big Oh notation Big Oh simplifies a complicated running

time function into a simple statement about its worst case growth rate

All constant coefficients are ignored All low order terms are ignored 3n + 3 is O(n) Big Oh is a statement that a particular

running time is no worse than some function, with appropriate constants

Page 8: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

Big Oh simplification examples 147n3 + 2n2 + 5n + 12083 is

O(n3)

n1000 + 2n isO(2n)

15n2 + 6n + 7log n + 145 isO(n2)

659n + nlog n + 87829 isO(n log n)

Note: In CS, we use log2 unless stated otherwise

Page 9: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

Big Oh Examples

Page 10: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

Mulitiplication by hand

How long does it take to do multiplication by hand?

123

x 456

738

615

492__

56088

Let’s assume that the length of the numbers is n digits (n multiplications + n carries) x n digits + (n + 1

digits) x n additions Running time: O(n2)

Page 11: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

Finding the largest element in an array

How do we find the largest element in an array?

Running time: O(n) if n is the length of the array What if the array is sorted in ascending order?

Running time: O(1)

int largest = array[0];

for( int i = 1; i < array.length; i++ )if( array[i] > largest )

largest = array[i];

System.out.println("Largest: " + largest);

System.out.println("Largest: " + array[array.length-1]);

Page 12: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

Bubble sort

Here is some code that sorts an array in ascending order

What is its running time?

Running time: O(n2)

for( int i = 0; i < array.length; i++ )for( int j = 0; j < array.length - 1; j++ )

if( array[j] > array[j + 1] ){

int temp = array[j];array[j] = array[j + 1];

array[j + 1] = temp; }

Page 13: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

Comparison of Big Oh Classes

Page 14: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

Hierarchy of complexities Here is a table of several different complexity

measures, in ascending order, with their functions evaluated at n = 100

Description Big Oh f(100)

Constant O(1) 1

Logarithmic O(log n) 6.64

Linear O(n) 100

Linearithmic O(n log n) 664.39

Quadratic O(n2) 10000

Cubic O(n3) 1000000

Exponential O(2n) 1.27 x 1030

Factorial O(n!) 9.33 x 10157

Page 15: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

Practical implications

Computers get faster, but not in unlimited ways If computers get 10 times faster, here is how much a

problem from each class could grow and still be solvable

Description Big Oh Increase in Size

Constant O(1) Unlimited

Logarithmic O(log n) 1000

Linear O(n) 10

Linearithmic O(n log n) 10

Quadratic O(n2) 3-4

Cubic O(n3) 2-3

Exponential O(2n) Hardly changes

Factorial O(n!) Hardly changes

Page 16: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

Rules of thumb

There is nothing better than constant time Logarithmic time means that the problem can

become much larger and only take a little longer Linear time means that time grows with the problem Linearithmic time is just a little worse than linear Quadratic time means that expanding the problem

size significantly could make it impractical Cubic time is about the reasonable maximum if we

expect the problem to grow Exponential and factorial time mean that we cannot

solve anything but the most trivial problem instances

Page 17: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

Memory Usage

Page 18: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

Memory usage

Memory usage can be a problem If you run out of memory, your

program can crash Memory usage can have serious

performance consequences too

Page 19: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

Memory

Remember, there are multiple levels of memory on a computer

Each next level is on the order of 500 times larger and 500 times slower

Cache•Actually on the CPU•Fast and expensive

RAM•Primary memory for a desktop computer•Pretty fast and relatively expensive

Hard Drive•Secondary memory for a desktop computer•Slow and cheap

1000X 1000X

1000X 1000X

Size Speed

Page 20: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

Memory speed

If you can do a lot of number crunching without leaving cache, that will be very fast

If you have to fetch data from RAM, that will slow things down

If you have to read and write data to the hard drive (unavoidable with large pieces of data like digital movies), you will slow things down a lot

Page 21: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

Measuring memory

Memory can be easier to estimate than running time

Depending on your input, you will allocate a certain number of objects, arrays, and primitive data types

It is possible to count the storage for each item allocated

Remember that a reference to an object or an array costs an additional 4 bytes on top of the size of the object

Page 22: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

Memory footprints

Here are the sizes of various types in Java

Note that the N refers to the number of elements in the array or String

Type Bytes

boolean 1

char 2

int 4

double 8

Type Bytes

boolean[] 16 + N

char[] 16 + 2N

int[] 16 + 4N

double[] 16 + 8N

Type Bytes

reference 4

String 40 + 2N

object 8 + size of members

array of objects 16 + (4 + size of members)N

Page 23: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

Searching

Page 24: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

Searching for a number

Lets say that I give you a list of numbers, and I ask you, “Is 37 on this list?”

As a human, you have no problem answering this question, as long as the list is reasonably short

What if the list is an array, and I want you to write a Java program to find some number?

Page 25: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

Search algorithm

Easy! We just look through every element in

the array until we find it or run out

If we find it, we return the index, otherwise we return -1

public static int find( int[] array, int number ) {for( int i = 0; i < array.length; i++ )

if( array[i] == number )return i;

return -1;}

Page 26: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

How long does it take?

Unfortunately for you, we know about Big Oh notation

Now we have some way to measure how long this algorithm takes

How long, if n is the length of the array?

O(n) time because we have to look through every element in the array, in the worst case

Page 27: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

Can we do better?

Is there any way to go smaller than O(n)?

What complexity classes even exist that are smaller than O(n)? O(1) O(log n)

Well, on average, we only need to check half the numbers, that’s ½ n which is still O(n)

Darn…

Page 28: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

Binary Search

Page 29: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

We can’t do better unless…

We can do better with more information

For example, if the list is sorted, then we can use that information somehow

How? We can play a High-Low game

Page 30: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

Binary search

Repeatedly divide the search space in half

We’re looking for 37, let’s say

5423 31

Check the middle(Too high)

Check the middle(Too low)

Check the middle(Too low)

Check the middle(Found it!)

37

Page 31: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

So, is that faster than linear search?

How long can it take? What if you never find what you’re

looking for? Well, then, you’ve narrowed it down

to a single spot in the array that doesn’t have what you want

And what’s the maximum amount of time that could have taken?

Page 32: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

Running time for binary search

We cut the search space in half every time

At worst, we keep cutting n in half until we get 1

Let’s say x is the number of times we look:

The running time is O(log n)

Page 33: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

Binary Search Examples

Page 34: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

Guessing game

We can apply this idea to a guessing game

First we tell the computer that we are going to pick a number between 1 and n

We pick, and it tries to narrow down the number

It should only take log n tries Remember log2(1,000,000) is only

about 20

Page 35: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

Interview question

This is a classic interview question asked by Microsoft, Amazon, and similar companies

Imagine that you have 9 red balls One of them is just slightly heavier

than the others, but so slightly that you can’t feel it

You have a very accurate two pan balance you can use to compare balls

Find the heaviest ball in the smallest number of weighings

Page 36: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

What’s the smallest possible number?

It’s got to be 8 or fewer We could easily test one ball against

every other ball

There must be some cleverer way to divide them up

Something that is related somehow to binary search

Page 37: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

That’s it!

We can divide the balls in half each time

If those all balance, it must be the one we left out to begin with

Page 38: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

Nope, we can do better

How? They key is that you can actually cut the number of balls

into three parts each time

We weigh 3 against 3, if they balance, then we know the 3 left out have the heavy ball

When it’s down to 3, weigh 1 against 1, again knowing that it’s the one left out that’s heavy if they balance

Page 39: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

Thinking outside the box, er, ball

The cool thing is… Yes, this is “cool” in the CS sense, not in

the real sense Anyway, the cool thing is that we are

trisecting the search space each time

This means that it takes log3 n weighings to find the heaviest ball

We could do 27 balls in 3 weighings, 81 balls in 4 weighings, etc.

Page 40: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

Quiz

Page 41: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

Upcoming

Page 42: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

Next time…

Sorting Lab 12

Page 43: Week 12 - Wednesday.  What did we talk about last time?  Hunters and prey  Class variables  Big Oh notation.

Reminders

Finish Project 4 Due Friday before midnight