29
CSC 430 Lecture1: Introduction and Python Primer

CSC 430 Lecture1: Introduction and Python Primer

  • Upload
    lilka

  • View
    25

  • Download
    0

Embed Size (px)

DESCRIPTION

CSC 430 Lecture1: Introduction and Python Primer. Today’s Class. Syllabus What is Algorithm Design? A first algorithmic problem Lessons Learned Python Primer. What is Algorithm Design?. - PowerPoint PPT Presentation

Citation preview

Page 1: CSC 430 Lecture1: Introduction and Python Primer

CSC 430 Lecture1: Introduction and Python Primer

Page 2: CSC 430 Lecture1: Introduction and Python Primer

Today’s Class

• Syllabus• What is Algorithm Design?• A first algorithmic problem• Lessons Learned• Python Primer

Page 3: CSC 430 Lecture1: Introduction and Python Primer

What is Algorithm Design?

• Algorithm Design is the process of developing a step-by-step process that solves a general class of problems.

• Proper algorithm design includes: – Careful statement of the problem, and what an optimal

(successful) solution looks like– Thorough specification of the algorithm, including data

structures– Accurate analysis of the algorithm’s speed (runtime)– Proof of correctness that the algorithm always finds the

correct solution to a problem

Page 4: CSC 430 Lecture1: Introduction and Python Primer

Algorithm Design vs. Hacking

Algorithm Design1. Think critically about the

problem and how to solve it optimally.

2. Spend as much time as possible designing the algorithm with pencil-and-paper.

3. If it can be solved, carefully implement the algorithm, avoiding programming bugs.

4. Never touch it again.

Hacking1. Do your best to understand the

problem in a few minutes/hours.2. Start writing code immediately.3. Stop when it seems to work.4. (Optional) Try to make it run

faster.5. Fix it when it breaks, add a

special case routine.6. Fix it when it breaks again.7. Fix it when it breaks again.8. …

Page 5: CSC 430 Lecture1: Introduction and Python Primer

5

A First Problem: Stable Matching• Problem: Given n men and n women, find a stable matching of

marriage partners, if it exists– Participants rate members of opposite sex.– Each man lists women in order of preference from best to worst.– Each woman lists men in order of preference from best to worst.– A matching is stable in the sense that:

• everyone has exactly one partner (a perfect matching) • nobody is willing to change marriage partners

Zeus Amy ClareBertha

Yancey Bertha ClareAmy

Xavier Amy ClareBertha

1st 2nd 3rd

Men’s Preference Profile

favorite least favorite

Clare Xavier ZeusYancey

Bertha Xavier ZeusYancey

Amy Yancey ZeusXavier

1st 2nd 3rd

Women’s Preference Profile

favorite least favorite

Page 6: CSC 430 Lecture1: Introduction and Python Primer

More on Matchings

Perfect Matching• Finding these are easy for

this problem!

• Assume m == w then pick pairs until everyone is married

Stable Matching• X Prefers B to A• B Prefers X to Y• Is the matching on the left

stable?X

Y

Z

A

B

CX

Y

Z

A

B

C

Page 7: CSC 430 Lecture1: Introduction and Python Primer

Brain Storm: How would you solve this problem?

• Remove or add people from the list?– Possible conflicts

• Think of it as a graph– If there are unstable pairs, then fix them

Zeus Amy ClareBertha

Yancey Bertha ClareAmy

Xavier Amy ClareBertha

1st 2nd 3rd

Men’s Preference Profile

favorite least favorite

Clare Xavier ZeusYancey

Bertha Xavier ZeusYancey

Amy Yancey ZeusXavier

1st 2nd 3rd

Women’s Preference Profile

favorite least favorite

Page 8: CSC 430 Lecture1: Introduction and Python Primer

•Propose-and-reject algorithm. [Gale-Shapley 1962] Intuitive method that guarantees to find a stable matching.

8

Propose-And-Reject Algorithm

Initialize each person to be free.while some man is free and hasn't proposed to every woman: Choose such a man m w = 1st woman on m's list to whom m has not yet proposed if w is free: assign m and w to be engaged else if w prefers m to her fiancé m‘: assign m and w to be engaged, and m' to be free else: w rejects m

Page 9: CSC 430 Lecture1: Introduction and Python Primer

9

Proof of Correctness: Termination•Observation 1. Men propose to women in decreasing order of preference.

•Observation 2. Once a woman is matched, she never becomes unmatched; she only "trades up."

•Claim. Algorithm terminates after at most n2 iterations of while loop.•Pf. Each time through the while loop a man proposes to a new woman. There are only n2 possible proposals.

Wyatt

Victor

1st

A

B

2nd

C

D

3rd

C

B

AZeus

Yancey

Xavier C

D

A

B

B

A

D

C

4th

E

E

5th

A

D

E

E

D

C

B

E

Bertha

Amy

1st

W

X

2nd

Y

Z

3rd

Y

X

VErika

Diane

Clare Y

Z

V

W

W

V

Z

X

4th

V

W

5th

V

Z

X

Y

Y

X

W

Z

n(n-1) + 1 proposals required

Page 10: CSC 430 Lecture1: Introduction and Python Primer

10

Proof of Correctness: Perfection

•Claim. All men and women get matched.•Pf. (by contradiction)– Suppose, for sake of contradiction, that Zeus is not

matched upon termination of algorithm.– Then some woman, say Amy, is not matched upon

termination.– By Observation 2, Amy was never proposed to.– But, Zeus proposes to everyone, since he ends up

unmatched. ▪

Page 11: CSC 430 Lecture1: Introduction and Python Primer

11

Proof of Correctness: Stability•Claim. The GS algorithm will produce no unstable pairs.•Pf. (by contradiction)

– Suppose Z-A is an unstable pair: each prefers each other to partner in Gale-Shapley matching S*. There are two ways that this can occur:

– Case 1: Z never proposed to A. Z prefers his GS partner to A. Z-A is stable.

– Case 2: Z proposed to A. A rejected Z (right away or later) A prefers her GS partner to Z. Z-A is stable.

– In either case A-Z is stable, a contradiction. ▪

Zeus-Bertha

Yancey-Amy

S*

. . .

men propose in decreasingorder of preference

women only trade up

Page 12: CSC 430 Lecture1: Introduction and Python Primer

12

Summary

•Stable matching problem. Given n men and n women, and their preferences, find a stable matching if one exists.

•Gale-Shapley algorithm. Guarantees to find a stable matching for any problem instance.

•We have only done specification and proof of correctness; runtime analysis covered next class.

Page 13: CSC 430 Lecture1: Introduction and Python Primer

PYTHON PRIMER

Page 14: CSC 430 Lecture1: Introduction and Python Primer

Python is…• Easy to learn• Interpreted, not compiled• Good for:

– Scripting– Rapid application development– Scientific computing

• A bracket-and-semicolon-free language(!)• Includes several useful built-in types• Very high-level• Similar to writing pseudocode• Really fun to code in

Page 15: CSC 430 Lecture1: Introduction and Python Primer

The Basics

• There are three ways to run python:– Interactively in the interpreter program– As a command-line script– As an executable script

• Mostly, you’ll stick with the interpreter, unless you are writing a real-world application

• You can try out _any_ language feature in the interpreter, without ever creating a file

Page 16: CSC 430 Lecture1: Introduction and Python Primer

Starting the Interpreter on Moe

• You all have accounts on moe.bw.edu• Talk to me after class if you are not

comfortable with logging in• Once logged in, type ‘python3’ at the prompt• Installing python on your own computer is

easy, and recommended.

Page 17: CSC 430 Lecture1: Introduction and Python Primer

Running Code in Python

• Whether you use the interpreter, or a source file, Python will execute the code one line at a time, storing the result in memory and producing output if required.

• Python programs end in the extension .py• To import foo.py in the interpreter:

>>>import foo• To reload a module in Python interpreter:

>>> from imp import reload>>> reload(foo)

Page 18: CSC 430 Lecture1: Introduction and Python Primer

Steps to Learning a Programming Language

1. Write Hello World!2. Learn the basic syntax3. Learn about the primitive types4. Learn to create/manipulate strings5. Learn how to do arithmetic6. Learn Flow control7. Learn how to write a function8. Learn at least one cool/unique thing about this

language

Page 19: CSC 430 Lecture1: Introduction and Python Primer

Your First Program

• No matter what language it is, the first program you’ll always write in it is the hello world application

• This is because a program is useless unless it can create output!

• In Python 3: print("Hello world!")

Page 20: CSC 430 Lecture1: Introduction and Python Primer

Syntax Example

• No curly brackets– New scope indicated with a colon– Scope is determined by indentation

• No semi colons– Lines are ended by a newline (imagine that!)– If you want to continue a line, just add a backslash:

print(“x is equal \to “ + i)

• Parentheses are optional, except when calling functions

x = 5i = 5#comments start with #if x == i :

print(“x is equal to “ + i)else:

print(“x was not equal to “ + i)

Page 21: CSC 430 Lecture1: Introduction and Python Primer

Declaring Variables

• You don’t!• Variables are created when they are first given a

value.• You cannot refer to a variable until it has been

assigned• Python types are dynamic, but strongly-typed– Variables get their type at time of assignment– Once assigned, they must be treated like the

expected type, or an exception will occur

Page 22: CSC 430 Lecture1: Introduction and Python Primer

The Primitive Types

• Python simplifies primitive types from what you are used to: – Integers– Floats (double precision)– Complex numbers (if you care)– strings (no chars)– Booleans:

• False = {False, None, anything equal to 0,any empty container}• True = {True, and anything not listed above}

Page 23: CSC 430 Lecture1: Introduction and Python Primer

Creating and Manipulating Strings• String literals are:

– Concatenated with the + operator:>>> S = “he” + “llo”>>>S ‘hello’

– Indexable:>>> S[1] ‘e’

– Slice-able>>> S = “hello”>>> S[1:4] ‘ell’

– Immutable>>> S[1] = “G” ERROR

– There is a lot more to learn about strings! Check the python documentation.

Page 24: CSC 430 Lecture1: Introduction and Python Primer

Arithmetic• Arithmetic is greatly simplified in

python 3.0• Resulting type is the most

complicated type in the expression:– 2 + 2 = 4– 2.0 + 2 = 4.0

• Operators: {+ - * / % // **}• Ints, floats evaluated like a

mathematician would do it:• 7.5 + 7 = 14.5• 7 – 6 = 1• 5 * 5 = 25• 3.5/2 = 1.75• 5 % 2 = 1• 5 / 2 = 2.5

• ** is the power operator:• 3**2 = 9• 4**.5 = 2.0• 27**(1/3) = 3

• // is the integer division operator (sort of)– Actually, it rounds down the result of

the division operator toward minus infinity

– 5//2 = 2– 3.5//2 = 1.0– -3//2 = -2

• Good rule to follow: for basic things you do, python will mostly do what you expect, but be careful if doing something out of the ordinary

Page 25: CSC 430 Lecture1: Introduction and Python Primer

Flow Control• if/else/elif:

if x == 1:print(“1”)

elif x == 2:print(“2”)

elif x == 3:print(“3”)

else:print(“invalid”)

• While loops:x = 0while x < 5:

x += 1

• For loops:– Iterate over a sequence, not

counting basedx = [1,2,3,4,5]for num in x:

print(num)– To iterate over indices, use

range(start = 0,finish)for i in range(len(x)):print(x[i])

• There is more you can read about: – break– continue– pass– else clauses on loops

Page 26: CSC 430 Lecture1: Introduction and Python Primer

Writing Functions

• No return type specified– But all functions have a return value

• Returns ‘None’—python’s version of Null—for void functions

• All other basic mechanics should be familiar to you, but you might want to learn about the really cool function calling features in python

def foo(arg1,arg2,arg3):return arg1/arg2 + arg3

Page 27: CSC 430 Lecture1: Introduction and Python Primer

Some Cool Python Features

• Lists:>>> L = [1,2,3,4,5]>>>L[2] 3>>>L[2:4] [3,4,5]

• List Comprehensions:>>> L2 = [x**2 for x in L]>>> L2 [1,4,9,16,25]

• Tuples—Immutable lists>>> x1 = (1,2)>>> x2 = (5,6)#Assignment can be done in pairs>>> x,y = x1

• Dictionaries>>>D = {}>>>D[“Ohio”] = “Columbus”>>>D[“Iowa”] = “DesMoines”

• Reading from a file is easy:f = open(‘foo.txt’,”r”)

#looks like C, doesn’t it?for line in f:

print(line)

Page 28: CSC 430 Lecture1: Introduction and Python Primer

More on Lists• For a list L:

– L = [] creates an empty list– L = [1,2,3] to initialize with values.

• Items can be a variable: L = [1,x,3]• Lists can be nested: L = [1, [2,3], 4] (can use to make 2D arrays)

– L.append(X) appends a single item– L.extend(L2) adds all items in L2 as items at the end of L– L1 + L2 produces the same result as L1.extend(L2) without

changing L1– Use len(L) to get the length– There is support for negative indexing:

• Using L above, L[-1] evaluates to 3

Page 29: CSC 430 Lecture1: Introduction and Python Primer

Slicing

• Many high-level languages include support for list slicing: – List slices are lists themselves– Use a colon to indicate a range:

• L[2:8] is a sub-list including indexes 2 – 7 – Leaving numbers out defaults to the beginning/end:

• L[:len(L)//2] is the first-half of a list• L[len(L)//2:] is the second half

– Negatives allowed here too• X = “dropExtension.doc”• X[:-4] evaluates to “dropExtension”