Snick snack CPSC 121: Models of Computation 2008/9 Winter Term 2 Introduction & Motivation Steve...

Post on 18-Jan-2018

218 views 0 download

description

More Introductions Introduce yourselves… how?

transcript

snick

snack

CPSC 121: Models of Computation2008/9 Winter Term 2

Introduction & Motivation

Steve Wolfman, based on notes by Patrice Belleville and others

Introductions

Steven Wolfman (call me Steve!)wolf@cs.ubc.caICICS 239; office hours (tentatively):Mon-Wed 11:30-12:30, Thu 2-4

but I have an open door policy:If my door is open, come in and talk!Also, I will usually be available after class.And, you can make appointments with me.

More Introductions

Introduce yourselves… how?

Introduce Yourselves in Groups of 4-ish

FIND ~3 people around you, preferably people you’ve never met. Form a group.

Have everyone in the group introduce themselves to everyone else in the group. (Count the number of intros this takes.)

Tell everyone why you’re here, your favorite career that you’ll never have, and one unusual thing about you.

Problem: How Many Introductions?

Problem: How many introductions does it take for everyone in a group to meet everyone else in a group?

Concept Q: Intros for 4

How many introductions does a group of 4 people take?

a.3b.4c.6d.12e.None of these

Problem: How Many Introductions?

Problem: How many introductions does it take for everyone in a group to meet everyone else in a group?

To solve this problem, we need to model it more formally.

How Many Introductions?

Model: One “introduction” is one person introducing themselves to another person. (So, two people need two introductions to introduce themselves to each other.)

A group has “introduced themselves” when every member of the group has introduced themselves to every other member of the group. (No self-introductions needed.)

How Many Introductions?

Problem: How many introductions does it take for a group of n people to introduce themselves?

How Many Introductions?

For 2 people?For 3 people?For 4 people?For 5 people?…For n people?

How Many Introductions?

For 100 people?For 8675309 people?For 1526097757 people?

Program for Introductionsintroductions n = n * (n - 1)

(In a programming language called Haskell.)

int introductions(int n){ return n * (n - 1);}

(In the Java programming language.)

Do you believe it?

Program for Introductions: Testing

Java version with 100: 9900

Do you believe it?

Program for Introductions: Testing

Java version with 100: 9900Java version with 8675309: 265642364

Do you believe it?

Program for Introductions: Testing

Java version with 100: 9900Java version with 8675309: 265642364Java version with 1526097757: -645820308

Um.. Do you believe it?

Program for Introductions: Testing

Haskell version with 100: 9900Haskell version with 8675309: 75260977570172

Haskell version with 1526097757: 2328974362394333292

Do you believe it?

Questions that CPSC121 Answers

How can we prove that our formula for the number of introductions is correct? (induction)

What went wrong in our Java implementation? (number representation)

How do we model computational systems at various levels (from hardware to abstract intent) in ways that facilitate “clear thought”? (propositional and predicate logic, proof, sets, functions, DFAs, relations, ...)

“Clear Thought”

Computer Science is the science of “clear thought”, but not like philosophy (or religion, or poetry, or...).

CS is the science of thoughts so clear in their expression and intent that we can realize them: execute them or test their truth in the world.

CPSC121 provides and applies the fundamentals you need to model the world with “clear thought”.

What is CPSC 121 Good For?

With CPSC121’s help, you will be able to:• model important problems so that they are easier

to discuss, reason about, solve, and test.• learn new modeling formalisms more easily.• communicate clearly and unambiguously with

other CS experts on complex topics.• characterize algorithms (CS problem solutions),

such as proving their correctness or efficacy.• critically read proofs: justifying why each step is

correct and judging what the proof means.

CPSC 121: Analysis & Proof

CPSC 121: Representation, Hardware, & Computation

CPSC 211: Software Design

CPSC 211: Data Structures

Where Does CPSC 121 Sit?

CPSC 111: Programming

Caveat #1: It couldn’t possibly be because we teach 121 that its box is biggest.Caveat #2: There’s a LOT more to learn on both sides after 121.

What “Models of Computation” Will We Work With?

• Propositional logic, as model for the combinational circuitry at the heart of computers

• Predicate logic (and later enhanced by sets, functions, and relations), as modeling language for computational problems

• Deterministic Finite Automata and regular expressions as applications of all previous concepts and a crude but (in a sense) complete model of computation as a whole

• Circuit diagrams using both combinational and sequential circuits to model the operation of a complete computer

Course Administration

Explore the CPSC 121 website:http://www.ugrad.cs.ubc.ca/~cs121/

Next Lecture Learning Goals: Pre-Class

By the start of class, you should be able to:– Translate back and forth between simple

natural language statements and propositional logic.

– Evaluate the truth of propositional logic statements using truth tables.

– Translate back and forth between propositional logic statements and circuits that assess the truth of those statements.

Next Lecture Prerequisites

Read Sections 1.1 and 1.4Solve problems like Exercise Set 1.1, #1-18

and Exercise Set 1.4, #1-17.You should have completed the open-book,

untimed* quiz on WebCT that’s due by 9PM the day before class.

* For logistical reasons, we set a 2 hour time limit, but you may submit as often as you like.

Let us know if we need to make the limit longer.

Additional Administrative NotesThe first quiz is “any marks gives full marks”.

So, if you get more than 0%, we’ll count it as 100%.

We may have to move the time of the midterm exam, since it conflicts with CPSC 211.

Labs, tutorials, and the Demco Learning Centre all start NEXT week (Jan 12).

TA assignments will be posted by end of day Tuesday (but may change through ~week 2).

Can I skip the last half hour of today’s office hours (to take care of Naomi)?

snick

snack

Some Things to Try...

(on your own or if we have time)

What Works is NOT Always Obvious

Let’s sort cards with the Quicksort “Algorithm” :1. If there are no cards in a deck, it’s sorted.2. Otherwise, pick a card at random.

a. Divide the other cards into a deck of cards less than or equal to that card and a deck of cards greater than it.

b. Give the “less” deck to a helper and have them Quicksort it.c. Give the “greater” deck to a helper and have them Quicksort it.d. Put the Quicksorted “less” deck on top of the picked card on

top of the Quicksorted “greater” deck. How can that work?It relies on itself to get its work done!

TRY it with a deck of cards.To compare cards, first: A < 2–10 < J < Q < K

If they’re equal so far: Clubs < Diamonds < Hearts < Spades

What Doesn’t Work isNOT Always Obvious (1 of 2)

Class Main { public static void main(String[] args) { // Let's add up 4 quarters. System.out.println("4 quarters gives us:"); System.out.println(0.25 + 0.25 + 0.25 + 0.25);

// Let's do something a hundred times. int i = 100; do { // Make i one smaller. i--; } while (i > 0);

System.out.println("Done!"); System.out.println("i ended up with the value: " + i); System.out.println("It went down by: " + (100 - i)); }}

Predict and then TRY: What does this print?(If you’re just taking 111, give it a week and then try.)

What Doesn’t Work isNOT Always Obvious (2 of 2)

Class Main { public static void main(String[] args) { // Let's add up 10 dimes. System.out.println("10 dimes gives us:"); System.out.println(0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1); // Let's try do something a hundred times.. // but accidentally go forever int i = 100; do { // Make i one LARGER. Oops! i++; } while (i > 0);

System.out.println("Done!"); System.out.println("i ended up with the value: " + i); System.out.println("It went down by: " + (100 - i)); }}

Predict and then TRY: What does this print?