today’s topics

28
CompSci 1 17.1 Today’s topics Complexity Notes from Mason Matthews Great Ideas Ch. 13 Computability Great Ideas Ch. 15, Brookshear Ch. 11

Upload: zaria

Post on 06-Jan-2016

27 views

Category:

Documents


0 download

DESCRIPTION

Today’s topics. Complexity Notes from Mason Matthews Great Ideas Ch. 13 Computability Great Ideas Ch. 15, Brookshear Ch. 11. What can be computed. What class of problems can be solved? G5, 4 GHz Pentium IV, SGI Onyx, pencil? Alan Turing proved some things, hypothesized others - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Today’s topics

CompSci 1 17.1

Today’s topics

Complexity Notes from Mason Matthews Great Ideas Ch. 13

Computability Great Ideas Ch. 15, Brookshear Ch. 11

Page 2: Today’s topics

CompSci 1 17.2

What can be computed

What class of problems can be solved? G5, 4 GHz Pentium IV, SGI Onyx, pencil? Alan Turing proved some things, hypothesized

others• Halting problem, Church-Markov-Turing thesis

What class of problems can be solved efficiently? Problems with no practical solution

• what does practical mean? Problems for which we can’t find a practical

solution• solving one solves them all

Page 3: Today’s topics

CompSci 1 17.3

Schedule students, minimal conflicts

Given student requests, available teachers write a program that

schedules classes Minimize conflicts

Add a GUI too Web interface … …

I can’t write this program because I’m too dumb

Page 4: Today’s topics

CompSci 1 17.4

One better scenario

I can’t write this program because it’s provably impossible

Page 5: Today’s topics

CompSci 1 17.5

Another possible scenario

I can’t write this program but neither can all these famous people

Page 6: Today’s topics

CompSci 1 17.6

Important terms

Tractable

Intractable

Noncomputable

Page 7: Today’s topics

CompSci 1 17.7

Types of Problems

Tractable Problems that can be solved by a computer in a

“reasonable” amount of time. Intractable

Problems that can’t be solved by a computer in a “reasonable” amount of time,

But can be solved eventually. Non-computable

Problems that can never be solved by a computer.

Page 8: Today’s topics

CompSci 1 17.8

Is there a path from Ann to Bob?

Ann Joe

Jim

John

Kim

JenBob

Page 9: Today’s topics

CompSci 1 17.9

Is there a path from Ann to Bob?

Ann Joe

Jim

John

Kim

JenBob

Suzy

Kyle

Frank

Josh

Jen

Brett

Ben

Julie

Lucy

Page 10: Today’s topics

CompSci 1 17.10

How much oil can flow?

Page 11: Today’s topics

CompSci 1 17.11

How much oil can flow?

Page 12: Today’s topics

CompSci 1 17.12

Can you color this map with 4 colors?

Page 13: Today’s topics

CompSci 1 17.13

Can you color this map with 3 colors?

Page 14: Today’s topics

CompSci 1 17.14

Can you color this map with 3 colors?

Page 15: Today’s topics

CompSci 1 17.15

Can you color this map with 3 colors?

Page 16: Today’s topics

CompSci 1 17.16

Dealing with hard problems

Random Numbers Can “expect” to solve some in reasonable time

Approximation Can guarantee that we’re “close” to the right

answer Parallel Computers?

Page 17: Today’s topics

CompSci 1 17.17

Non-Computable Problems

Problems that cannot be solved by a computer ever

Page 18: Today’s topics

CompSci 1 17.18

Not impossible, but impractical

Towers of Hanoi How long to move n disks?

What combination of switches turns the light on? Try all combinations, how many are there? Is there a better way?

Page 19: Today’s topics

CompSci 1 17.19

Travelling Salesperson

Visit every city exactly once

Minimize cost of travel or distance

Is there a tour for under $2,000 ? less than 6,000 miles?

Is close good enough? Try all paths, fromevery starting point -- how long does this take?

a, b, c, d, e, f, gb, a, c, d, e, f, g ...

Page 20: Today’s topics

CompSci 1 17.20

Complexity Classifications

This route hits all cities for less than $2,000 --- verify properties of route efficiently.

Hard to find optimal solution

Pack trucks with barrels,use minimal # trucks

Ideas?

Problems are the “same hardness”: solve one efficiently, solve them all

Page 21: Today’s topics

CompSci 1 17.21

Are hard problems easy?

P = easy problems, NP = “hard” problems P means solvable in polynomial time

• Difference between N, N2, N10 ? NP means non-deterministic, polynomial time

• guess a solution and verify it efficiently

Question: P = NP ? Rich or famous? if yes, a whole class of difficult problems can be solved efficiently---one problem is reducible to another

if no, none of the hard problems can be solved efficiently

showing the first problem was in NP was an exercise in intellectual bootstrapping (1971)

Page 22: Today’s topics

CompSci 1 17.22

Theory and Practice

Number theory: pure mathematics How many prime

numbers are there? How do we factor? How do we determine

primeness?

Computer Science Primality is “easy” Factoring is “hard” Encryption is possible

top secret

public-key cryptography

randomized primalitytesting

Page 23: Today’s topics

CompSci 1 17.23

Halt or not

Does the following code eventually terminate?. . .

while (x > 1)

{

if (x > 2)

x = x – 2;

else

x = x + 2;

} What if x is 8? How about 9?

Page 24: Today’s topics

CompSci 1 17.24

Halt or not

Does the following code eventually terminate?. . .

while (x > 1)

{

if (x % 2 == 0)

x = x / 2;

else

x = 3*x + 1;

} What if x is 8? How about 7? How about all

numbers > 0?

Page 25: Today’s topics

CompSci 1 17.25

If you start this program, will itever stop running?

public class Client {    public static void main(String[] args) {       if(args.length != 2) {          System.out.println("Usage: vbj Client <carrier-name> <aircraft-name>\n");          return;       }

      String carrierName = args[0];       String aircraftName = args[1];       org.omg.CORBA.Object carrier = null;       org.omg.CORBA.Object aircraft = null;

      org.omg.CORBA.ORB orb = null;       try {           orb = org.omg.CORBA.ORB.init(args, null);       }       catch (org.omg.CORBA.SystemException se) {           System.err.println("ORB init failure " + se);           System.exit(1);        }

      { // scope          try {             carrier = orb.bind("IDL:Ship/AircraftCarrier:1.0", carrierName, null, null);          }          catch (org.omg.CORBA.SystemException se) {              System.err.println("ORB init failure " + se);              System.exit(1);           }          org.omg.CORBA.Request request = carrier._request("launch");          request.add_in_arg().insert_string(aircraftName);          request.set_return_type(orb.get_primitive_tc(org.omg.CORBA.TCKind.tk_objref));          request.invoke();          aircraft = request.result().value().extract_Object();       }

      { // scope          org.omg.CORBA.Request request = aircraft._request("codeNumber");          request.set_return_type(orb.get_primitive_tc(org.omg.CORBA.TCKind.tk_string));          request.invoke();          String designation = request.result().value().extract_string();          System.out.println ("Aircraft " + designation + " is coming your way");       } 

      { // scope          org.omg.CORBA.Request request = aircraft._request("attitude");

         int altitude = 10000;          org.omg.CORBA.Any ioAltitude = request.add_inout_arg();          ioAltitude.insert_long(altitude);

}

         try {             carrier = orb.bind("IDL:Ship/AircraftCarrier:1.0", carrierName, null, null);          }          catch (org.omg.CORBA.SystemException se) {              System.err.println("ORB init failure " + se);              System.exit(1);           }          org.omg.CORBA.Request request = carrier._request("launch");          request.add_in_arg().insert_string(aircraftName);          request.set_return_type(orb.get_primitive_tc(org.omg.CORBA.TCKind.tk_objref));          request.invoke();          aircraft = request.result().value().extract_Object();       }

      { // scope          org.omg.CORBA.Request request = aircraft._request("codeNumber");          request.set_return_type(orb.get_primitive_tc(org.omg.CORBA.TCKind.tk_string));          request.invoke();          String designation = request.result().value().extract_string();          System.out.println ("Aircraft " + designation + " is coming your way");       } 

      { // scope          org.omg.CORBA.Request request = aircraft._request("attitude");

         int altitude = 10000;          org.omg.CORBA.Any ioAltitude = request.add_inout_arg();          ioAltitude.insert_long(altitude);

         String direction = "headup";          request.add_in_arg().insert_string(direction);          request.invoke();

         altitude = ioAltitude.extract_long();          System.out.println ("Aircraft is heading up to " + altitude + " Feet.");

      }    } }

Page 26: Today’s topics

CompSci 1 17.26

The halting problem: writing DoesHalt

boolean DoesHalt(String progname, String s)

returns true if progname halts given s as input, false otherwise

if (DoesHalt(f,s)) cout << "does halt" << endl; else cout << "does not halt" << endl;

Programs that read program A compiler is a program that reads other programs as

input Can a word counting program count its own words?

The DoesHalt function might simulate, analyze, … One program/function that works for any

program/input

Page 27: Today’s topics

CompSci 1 17.27

Consider this code

// f is a filename of this programif (DoesHalt(f,f)) { while (true) { // do nothing forever } } return 0;

We want to show writing DoesHalt is impossible Proof by contradiction: Assume possible, show impossible

situation results

Page 28: Today’s topics

CompSci 1 17.28

Noncomputable problems

What other questions can we not answer? Do two programs do the same thing? Do programs have any bugs? Do programs do what they’re supposed to do?

Halting Problem. Program Equivalence. Optimal Data Compression. Virus Identification.

Impossible to write Java program to solve any of these problem!