COMPSCI 102 Introduction to Discrete Mathematics.

Slides:



Advertisements
Similar presentations
Grade School Revisited: How To Multiply Two Numbers Great Theoretical Ideas In Computer Science Anupam Gupta Danny Sleator CS Fall 2010 Lecture.
Advertisements

CS Divide and Conquer/Recurrence Relations1 Divide and Conquer.
Lecture 3: Parallel Algorithm Design
Design & Analysis of Algorithms COMP 482 / ELEC 420 John Greiner.
Grade School Again: A Parallel Perspective Great Theoretical Ideas In Computer Science Steven RudichCS Spring 2004 Lecture 17Mar 16, 2004Carnegie.
Recursion Lecture 18: Nov 18.
Lecture 4. Paradigm #2 Recursion Last time we discussed Fibonacci numbers F(n), and Alg fib(n) if (n
Grade School Revisited: How To Multiply Two Numbers Great Theoretical Ideas In Computer Science Victor Adamchik Danny Sleator CS Spring 2010 Lecture.
Algorithms Recurrences. Definition – a recurrence is an equation or inequality that describes a function in terms of its value on smaller inputs Example.
Lecture 3 Nearest Neighbor Algorithms Shang-Hua Teng.
Divide-and-Conquer1 7 2  9 4   2  2 79  4   72  29  94  4.
Notes on the analysis of multiplication algorithms.. Dr. M. Sakalli, Marmara University.
Lecture 4: Divide and Conquer III: Other Applications and Examples Shang-Hua Teng.
Introduction Credits: Steve Rudich, Jeff Edmond, Ping Xuan.
Grade School Revisited: How To Multiply Two Numbers Great Theoretical Ideas In Computer Science Steven RudichCS Spring 2004 Lecture 16March 4,
Recursion Credits: Jeff Edmonds, Ping Xuan. MULT(X,Y): If |X| = |Y| = 1 then RETURN XY Break X into a;b and Y into c;d e = MULT(a,c) and f =MULT(b,d)
On Time Versus Input Size Great Theoretical Ideas In Computer Science Steven RudichCS Spring 2004 Lecture 15March 2, 2004Carnegie Mellon University.
Introduction By Jeff Edmonds York University COSC 3101 Lecture 1 So you want to be a computer scientist? Grade School Revisited: How To Multiply Two Numbers.
Analysis of Algorithms
Great Theoretical Ideas in Computer Science.
Grade School Revisited: How To Multiply Two Numbers Great Theoretical Ideas In Computer Science S. Rudich V. Adamchik CS Spring 2006 Lecture 18March.
Arithmetic.
COMPSCI 102 Introduction to Discrete Mathematics.
Complex Numbers Introduction.
Asymptotic Growth Rates Themes –Analyzing the cost of programs –Ignoring constants and Big-Oh –Recurrence Relations & Sums –Divide and Conquer Examples.
MA/CSSE 473 Day 03 Asymptotics A Closer Look at Arithmetic With another student, try to write a precise, formal definition of “t(n) is in O(g(n))”
Divide-and-Conquer 7 2  9 4   2   4   7
Mathematics Review and Asymptotic Notation
Computer Algorithms Ch. 2
Great Theoretical Ideas in Computer Science.
Data Structures and Algorithms A. G. Malamos
Project 2 due … Project 2 due … Project 2 Project 2.
Recursive Algorithms Introduction Applications to Numeric Computation.
Recursion Jeff Edmonds York University COSC 6111 Lecture 3 Friends & Steps for Recursion Derivatives Recursive Images Multiplying Parsing Ackermann.
Divide and Conquer Andreas Klappenecker [based on slides by Prof. Welch]
Divide & Conquer  Themes  Reasoning about code (correctness and cost)  recursion, induction, and recurrence relations  Divide and Conquer  Examples.
Tonga Institute of Higher Education Design and Analysis of Algorithms IT 254 Lecture 2: Mathematical Foundations.
Program Efficiency & Complexity Analysis. Algorithm Review An algorithm is a definite procedure for solving a problem in finite number of steps Algorithm.
J. Elder COSC 3101N Thinking about Algorithms Abstractly Lecture 1. Introduction.
Introduction Pizzanu Kanongchaiyos, Ph.D.
Recurrences David Kauchak cs161 Summer Administrative Algorithms graded on efficiency! Be specific about the run times (e.g. log bases) Reminder:
4/3/2003CSE More Math CSE Algorithms Euclidean Algorithm Divide and Conquer.
Divide and Conquer Andreas Klappenecker [based on slides by Prof. Welch]
COMPSCI 102 Discrete Mathematics for Computer Science.
COSC 3101Winter, 2004 COSC 3101 Design and Analysis of Algorithms Lecture 2. Relevant Mathematics: –The time complexity of an algorithm –Adding made easy.
Lecture 5 Today, how to solve recurrences We learned “guess and proved by induction” We also learned “substitution” method Today, we learn the “master.
Master Method Some of the slides are from Prof. Plaisted’s resources at University of North Carolina at Chapel Hill.
1 How to Multiply Slides by Kevin Wayne. Copyright © 2005 Pearson-Addison Wesley. All rights reserved. integers, matrices, and polynomials.
Divide and Conquer Faculty Name: Ruhi Fatima Topics Covered Divide and Conquer Matrix multiplication Recurrence.
Lecture # 6 1 Advance Analysis of Algorithms. Divide-and-Conquer Divide the problem into a number of subproblems Similar sub-problems of smaller size.
Grade School Revisited: How To Multiply Two Numbers CS Lecture 4 2 X 2 = 5.
Unary, Binary, and Beyond Great Theoretical Ideas In Computer Science Steven RudichCS Spring 2003 Lecture 2Jan 16, 2003Carnegie Mellon University.
On Time Versus Input Size Great Theoretical Ideas In Computer Science S. Rudich V. Adamchik CS Spring 2006 Lecture 17March 21, 2006Carnegie Mellon.
Introduction to Analysis of Algorithms
Lecture 3: Parallel Algorithm Design
Jeff Edmonds York University
Great Theoretical Ideas in Computer Science
Great Theoretical Ideas in Computer Science
Algorithms with numbers (1) CISC4080, Computer Algorithms
Lecture 3: Divide-and-conquer
How To Multiply Two Numbers
CS 3343: Analysis of Algorithms
Grade School Revisited: How To Multiply Two Numbers
By Jeff Edmonds York University
CS 3343: Analysis of Algorithms
Data Structures Review Session
Grade School Revisited: How To Multiply Two Numbers
Introduction to Discrete Mathematics
Topic: Divide and Conquer
Introduction to Discrete Mathematics
Presentation transcript:

COMPSCI 102 Introduction to Discrete Mathematics

Grade School Revisited: How To Multiply Two Numbers 2 X 2 = 5 Lecture 22 (November 14, 2007)

(a+bi)(c+di) Gauss

Gauss’ Complex Puzzle Can you do better than $4.02? Remember how to multiply two complex numbers a + bi and c + di? (a+bi)(c+di) = [ac –bd] + [ad + bc] i Input: a,b,c,d Output: ac-bd, ad+bc If multiplying two real numbers costs $1 and adding them costs a penny, what is the cheapest way to obtain the output from the input?

Gauss’ $3.05 Method Input:a,b,c,d Output: ac-bd, ad+bc X 1 = a + b X 2 = c + d X 3 = X 1 X 2 = ac + ad + bc + bd X 4 = ac X 5 = bd X 6 = X 4 – X 5 = ac - bd X 7 = X 3 – X 4 – X 5 = bc + ad c $ $ $ c c cc

The Gauss optimization saves one multiplication out of four. It requires 25% less work.

+ T(n) = amount of time grade school addition uses to add two n-bit numbers * * * * * * * * * * * * * * * * Time complexity of grade school addition We saw that T(n) was linear T(n) = Θ (n)

Time complexity of grade school multiplication T(n) = The amount of time grade school multiplication uses to add two n-bit numbers We saw that T(n) was quadratic T(n) = Θ (n 2 ) X * * * * * * * * * * * * * * * * * * * * * * * * * * * * n2n2

# of bits in the numbers timetime Grade School Addition: Linear time Grade School Multiplication: Quadratic time No matter how dramatic the difference in the constants, the quadratic curve will eventually dominate the linear curve

Is there a sub-linear time method for addition?

Any addition algorithm takes Ω (n) time Claim: Any algorithm for addition must read all of the input bits Proof: Suppose there is a mystery algorithm A that does not examine each bit Give A a pair of numbers. There must be some unexamined bit position i in one of the numbers

* * * * * * * * * * * * * * A did not read this bit at position i Any addition algorithm takes Ω (n) time If A is not correct on the inputs, we found a bug If A is correct, flip the bit at position i and give A the new pair of numbers. A gives the same answer as before, which is now wrong.

Grade school addition can’t be improved upon by more than a constant factor

Grade School Addition: Θ (n) time. Furthermore, it is optimal Grade School Multiplication: Θ (n 2 ) time Is there a clever algorithm to multiply two numbers in linear time? Despite years of research, no one knows! If you resolve this question, Carnegie Mellon will give you a PhD!

Can we even break the quadratic time barrier? In other words, can we do something very different than grade school multiplication?

Divide And Conquer An approach to faster algorithms: DIVIDE a problem into smaller subproblems CONQUER them recursively GLUE the answers together so as to obtain the answer to the larger problem

X = Y = ab cd X = a 2 n/2 + b Y = c 2 n/2 + d n/2 bits n bits X × Y = ac 2 n + (ad + bc) 2 n/2 + bd X Y Multiplication of 2 n-bit numbers

X = Y = ab cd n/2 bits X × Y = ac 2 n + (ad + bc) 2 n/2 + bd MULT(X,Y): If |X| = |Y| = 1 then return XY else break X into a;b and Y into c;d return MULT(a,c) 2 n + (MULT(a,d) + MULT(b,c)) 2 n/2 + MULT(b,d)

Same thing for numbers in decimal! X = Y = ab cd X = a 10 n/2 + b Y = c 10 n/2 + d n/2 digits n digits X × Y = ac 10 n + (ad + bc) 10 n/2 + bd

Multiplying (Divide & Conquer style) X = Y = X × Y = ac 10 n + (ad + bc) 10 n/2 + bd ab cd 1234* * * * * *21 12*39 34*21 34*39 1*2 1*1 2*2 2* Hence: 12*21 = 2* (1 + 4) = 252

Multiplying (Divide & Conquer style) X = Y = X × Y = ac 10 n + (ad + bc) 10 n/2 + bd ab cd 1234* * * * * *21 12*39 34*21 34* * * * *1=

Multiplying (Divide & Conquer style) X = Y = X × Y = ac 10 n + (ad + bc) 10 n/2 + bd ab cd 1234* * * * * * * * *1 =

Divide, Conquer, and Glue MULT(X,Y)

if |X| = |Y| = 1 then return XY, else… Divide, Conquer, and Glue MULT(X,Y):

X=a;b Y=c;d Divide, Conquer, and Glue MULT(X,Y): Mult( a,c ) Mult( a,d ) Mult( b,c ) Mult( b,d )

X=a;b Y=c;d Divide, Conquer, and Glue MULT(X,Y): Mult(a,c) Mult( a,d ) Mult( b,c ) Mult( b,d )

X=a;b Y=c;d Divide, Conquer, and Glue MULT(X,Y): ac Mult( a,d ) Mult( b,c ) Mult( b,d )

X=a;b Y=c;d Divide, Conquer, and Glue MULT(X,Y): ac Mult(a,d) Mult( b,c ) Mult( b,d )

X=a;b Y=c;d Divide, Conquer, and Glue MULT(X,Y): ac ad Mult( b,c ) Mult( b,d )

X=a;b Y=c;d Divide, Conquer, and Glue MULT(X,Y): ac ad Mult(b,c) Mult( b,d )

X=a;b Y=c;d Divide, Conquer, and Glue MULT(X,Y): ac ad bc Mult( b,d )

X=a;b Y=c;d Divide, Conquer, and Glue MULT(X,Y): ac ad bc Mult(b,d)

X=a;b Y=c;d Divide, Conquer, and Glue MULT(X,Y): ac ad bc bd XY = ac2 n + (ad+bc)2 n /2 + bd

Time required by MULT T(n) = time taken by MULT on two n-bit numbers What is T(n)? What is its growth rate? Big Question: Is it Θ (n 2 )? T(n) = 4 T(n/2) conquering time divide and glue + (k’n + k’’)

Recurrence Relation MULT(X,Y): If |X| = |Y| = 1 then return XY else break X into a;b and Y into c;d return MULT(a,c) 2 n + (MULT(a,d) + MULT(b,c)) 2 n/2 + MULT(b,d) T(1) = k for some constant k T(n) = 4 T(n/2) + k’n + k’’ for constants k’ and k’’

Recurrence Relation MULT(X,Y): If |X| = |Y| = 1 then return XY else break X into a;b and Y into c;d return MULT(a,c) 2 n + (MULT(a,d) + MULT(b,c)) 2 n/2 + MULT(b,d) T(1) = 1 T(n) = 4 T(n/2) + n

Technique: Labeled Tree Representation T(n) = n + 4 T(n/2) n = T(1) = 1 1 = T(n) T(n/2)

ac ad bc bd T(n) = 4 T(n/2) + conquering time divide and glue (k’n + k’’) X=a;b Y=c;d XY = ac2 n + (ad+bc)2 n/2 + bd

n = T(n) T(n/2)

n = T(n) T(n/2) n/2 T (n/4) T (n/4) T (n/4) T (n/4)

n = T(n) T(n/2) n/2 T (n/4) T (n/4) T (n/4) T (n/4) n/2 T (n/4) T (n/4) T (n/4) T (n/4)

n n/2 + n/2 + n/2 + n/ i log 2 (n) Level i is the sum of 4 i copies of n/2 i

n n/2 + n/2 + n/2 + n/2 Level i is the sum of 4 i copies of n/2 i n = 4n = 2 i n = (n)n = 1n = n( n) = n(2n-1) = 2n 2 -n

Divide and Conquer MULT: Θ (n 2 ) time Grade School Multiplication: Θ (n 2 ) time

MULT revisited MULT(X,Y): If |X| = |Y| = 1 then return XY else break X into a;b and Y into c;d return MULT(a,c) 2 n + (MULT(a,d) + MULT(b,c)) 2 n/2 + MULT(b,d) MULT calls itself 4 times. Can you see a way to reduce the number of calls?

Input:a,b,c,d Output: ac-bd, ad+bc X 1 = a + b X 2 = c + d X 3 = X 1 X 2 = ac + ad + bc + bd X 4 = ac X 5 = bd X 6 = X 4 – X 5 = ac - bd X 7 = X 3 – X 4 – X 5 = bc + ad c $ $ $ c c cc Gauss’ optimization

Karatsuba, Anatolii Alexeevich (1937-) Sometime in the late 1950’s Karatsuba had formulated the first algorithm to break the kissing barrier!

Gaussified MULT (Karatsuba 1962) T(n) = 3 T(n/2) + n Actually: T(n) = 2 T(n/2) + T(n/2 + 1) + kn MULT(X,Y): If |X| = |Y| = 1 then return XY else break X into a;b and Y into c;d e : = MULT(a,c) f := MULT(b,d) return e 2 n + (MULT(a+b,c+d) – e - f) 2 n/2 + f

n = T(n) T(n/2)

n = T(n) T(n/2) n/2 T (n/4) T (n/4) T (n/4)

n n/2 + n/2 + n/ i log 2 (n) Level i is the sum of 3 i copies of n/2 i

n n/2 + n/2 + n/2 Level i is the sum of 3 i copies of n/2 i /2n = 9/4n = (3/2) i n = (3/2) log n n = 1n = n(1+3/2+(3/2) (3/2) log 2 n ) = 3n 1.58… – 2n

Dramatic Improvement for Large n T(n) = 3n log 2 3 – 2n = Θ (n log 2 3 ) = Θ (n 1.58… ) A huge savings over Θ (n 2 ) when n gets large.

n n2n2

Multiplication Algorithms Kindergartenn2 n Grade Schooln2n2 Karatsuban 1.58… Fastest Knownn logn loglogn

n2n2 n n log(n) loglog(n) n 1.584

Here’s What You Need to Know… Gauss’s Multiplication Trick Proof of Lower bound for addition Divide and Conquer Solving Recurrences Karatsuba Multiplication