1 / 85

Grade School Revisited: How To Multiply Two Numbers

Learn about different multiplication methods including grade school, peasant, and divide and conquer algorithms. Explore their complexities and find out which method is best for multiplying two numbers.

clementsj
Download Presentation

Grade School Revisited: How To Multiply Two Numbers

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 2 X 2 = 5 Grade School Revisited:How To Multiply Two Numbers

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

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

  4. Grade school addition Grade school addition is linear time. Is there a sub-linear time method for addition?

  5. 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

  6. 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. * * * * * * * * * A did not read this bit at position i * * * * * * * * * * * * * * * * * * *

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

  8. Grade school multiplication Grade School Multiplication: Θ(n2) time Is there a clever algorithm to multiply two numbers in linear time?

  9. Repetitive addition int mult( int n, int m) { if( m==0 ) return 0; return mult(n, m-1) + n; } What is the complexity of this algorithm?

  10. Peasant multiplication x1011 1001 ------ 1011 0000 0000 1011 ----------- 1100011

  11. Peasant multiplication Why is it called the “Russian” peasant’s algorithm?

  12. Peasant multiplication It’s also called the Egyptian multiplication.

  13. But if the number does not fit the CPU? Can we do something very different than grade school multiplication?

  14. 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

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

  16. Same thing for decimals n digits • X = • Y = a b c d n/2 digits n/2 digits X = a 10n/2 + b Y = c 10n/2 + d X × Y = ac 10n + (ad + bc) 10n/2 + bd

  17. a b c d Multiplying (Divide & Conquer style) • 12345678 * 21394276 • *4276 5678*2139 5678*4276 • X = • Y = • X × Y = ac 10n + (ad + bc) 10n/2 + bd

  18. a b c d Multiplying (Divide & Conquer style) • 12345678 * 21394276 • 1234*2139 1234*4276 5678*2139 5678*4276 • X = • Y = • X × Y = ac 10n + (ad + bc) 10n/2 + bd

  19. a b c d Multiplying (Divide & Conquer style) • 12345678 * 21394276 • 1234*2139 1234*42765678*2139 5678*4276 • X = • Y = • X × Y = ac 10n + (ad + bc) 10n/2 + bd

  20. a b c d Multiplying (Divide & Conquer style) • 12345678 * 21394276 • 1234*2139 1234*4276 5678*21395678*4276 • X = • Y = • X × Y = ac 10n + (ad + bc) 10n/2 + bd

  21. a b c d Multiplying (Divide & Conquer style) • 12345678 * 21394276 • 1234*2139 1234*4276 5678*2139 5678*4276 • X = • Y = • X × Y = ac 10n + (ad + bc) 10n/2 + bd

  22. a b c d Multiplying (Divide & Conquer style) • 12345678 * 21394276 • 1234*2139 1234*4276 5678*2139 5678*4276 • X = • Y = • X × Y = ac 10n + (ad + bc) 10n/2 + bd

  23. a b c d Multiplying (Divide & Conquer style) • 12345678 * 21394276 • 1234*2139 1234*4276 5678*2139 5678*4276 • 12*2112*39 34*21 34*39 xxxxxxxxxxxxxxxxxxxxxxxxx • X = • Y = • X × Y = ac 10n + (ad + bc) 10n/2 + bd

  24. a b c d Multiplying (Divide & Conquer style) • 12345678 * 21394276 • 1234*2139 1234*4276 5678*2139 5678*4276 • 12*21 12*39 34*21 34*39 xxxxxxxxxxxxxxxxxxxxxxxxx • X = • Y = • X × Y = ac 10n + (ad + bc) 10n/2 + bd

  25. a b c d Multiplying (Divide & Conquer style) • 12345678 * 21394276 • 1234*2139 1234*4276 5678*2139 5678*4276 • 12*21 12*39 34*21 34*39 xxxxxxxxxxxxxxxxxxxxxxxxx • X = • Y = • X × Y = ac 10n + (ad + bc) 10n/2 + bd

  26. a b c d Multiplying (Divide & Conquer style) • 12345678 * 21394276 • 1234*2139 1234*4276 5678*2139 5678*4276 • 12*21 12*39 34*21 34*39 xxxxxxxxxxxxxxxxxxxxxxxxx • X = • Y = • X × Y = ac 10n + (ad + bc) 10n/2 + bd

  27. a b c d Multiplying (Divide & Conquer style) • 12345678 * 21394276 • 1234*2139 1234*4276 5678*2139 5678*4276 • 12*21 12*39 34*21 34*39 xxxxxxxxxxxxxxxxxxxxxxxxx • X = • Y = • X × Y = ac 10n + (ad + bc) 10n/2 + bd

  28. a b c d Multiplying (Divide & Conquer style) • 12345678 * 21394276 • 1234*2139 1234*4276 5678*2139 5678*4276 • 12*21 12*39 34*21 34*39 xxxxxxxxxxxxxxxxxxxxxxxxx • 1*2 1*1 2*2 2*1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx • X = • Y = • X × Y = ac 10n + (ad + bc) 10n/2 + bd

  29. a b c d Multiplying (Divide & Conquer style) • 12345678 * 21394276 • 1234*2139 1234*4276 5678*2139 5678*4276 • 12*2112*39 34*21 34*39 xxxxxxxxxxxxxxxxxxxxxxxxx • 1*2 1*1 2*2 2*1 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx • Hence: 12*21 = 2*102 + (1 + 4)101 + 2 = 252 2 1 4 2 • X = • Y = • X × Y = ac 10n + (ad + bc) 10n/2 + bd

  30. a b c d Multiplying (Divide & Conquer style) • 12345678 * 21394276 • 1234*2139 1234*4276 5678*2139 5678*4276 • 25212*39 34*21 34*39 xxxxxxxxxxxxxxxxxxxxxxxxx • 1*2 1*1 2*2 2*1 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx • Hence: 12*21 = 2*102 + (1 + 4)101 + 2 = 252 2 1 4 2 • X = • Y = • X × Y = ac 10n + (ad + bc) 10n/2 + bd

  31. a b c d Multiplying (Divide & Conquer style) • 12345678 * 21394276 • 1234*2139 1234*4276 5678*2139 5678*4276 • 25212*39 34*21 34*39 xxxxxxxxxxxxxxxxxxxxxxxxx • 1*2 1*1 2*2 2*1 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx • Hence: 12*21 = 2*102 + (1 + 4)101 + 2 = 252 • X = • Y = • X × Y = ac 10n + (ad + bc) 10n/2 + bd

  32. a b c d Multiplying (Divide & Conquer style) • 12345678 * 21394276 • 1234*2139 1234*4276 5678*2139 5678*4276 • 252 12*39 34*21 34*39 xxxxxxxxxxxxxxxxxxxxxxxxx • xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 1*3 1*9 2*3 2*9 • X = • Y = • X × Y = ac 10n + (ad + bc) 10n/2 + bd

  33. a b c d Multiplying (Divide & Conquer style) • 12345678 * 21394276 • 1234*2139 1234*4276 5678*2139 5678*4276 • 242 12*39 34*21 34*39 xxxxxxxxxxxxxxxxxxxxxxxxx • xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 3 9 6 18 *102 + *101 + *101 + *1 • X = • Y = • X × Y = ac 10n + (ad + bc) 10n/2 + bd

  34. a b c d Multiplying (Divide & Conquer style) • 12345678 * 21394276 • 1234*2139 1234*4276 5678*2139 5678*4276 • 242 468 34*21 34*39 xxxxxxxxxxxxxxxxxxxxxxxxx • xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 3 9 6 18 *102 + *101 + *101 + *1 • X = • Y = • X × Y = ac 10n + (ad + bc) 10n/2 + bd

  35. a b c d Multiplying (Divide & Conquer style) • 12345678 * 21394276 • 1234*2139 1234*4276 5678*2139 5678*4276 • 12*21 12*39 34*21 34*39 xxxxxxxxxxxxxxxxxxxxxxxxx 252 468 714 1326 • X = • Y = • X × Y = ac 10n + (ad + bc) 10n/2 + bd

  36. a b c d Multiplying (Divide & Conquer style) • 12345678 * 21394276 • 1234*2139 1234*4276 5678*2139 5678*4276 • 12*21 12*39 34*21 34*39 xxxxxxxxxxxxxxxxxxxxxxxxx 252 468 714 1326 *104 + *102 + *102 + *1 • X = • Y = • X × Y = ac 10n + (ad + bc) 10n/2 + bd

  37. a b c d Multiplying (Divide & Conquer style) • 12345678 * 21394276 • 1234*2139 1234*4276 5678*2139 5678*4276 • 12*21 12*39 34*21 34*39 xxxxxxxxxxxxxxxxxxxxxxxxx • = 2639526 252 468 714 1326 *104 + *102 + *102 + *1 • X = • Y = • X × Y = ac 10n + (ad + bc) 10n/2 + bd

  38. a b c d Multiplying (Divide & Conquer style) • 12345678 * 21394276 • 2639526 1234*4276 5678*2139 5678*4276 • X = • Y = • X × Y = ac 10n + (ad + bc) 10n/2 + bd

  39. a b c d Multiplying (Divide & Conquer style) • 12345678 * 21394276 • 2639526 5276584 12145242 24279128 • X = • Y = • X × Y = ac 10n + (ad + bc) 10n/2 + bd

  40. a b c d Multiplying (Divide & Conquer style) • 12345678 * 21394276 • 2639526 5276584 12145242 24279128 *108 + *104 + *104 + *1 • X = • Y = • X × Y = ac 10n + (ad + bc) 10n/2 + bd

  41. a b c d Multiplying (Divide & Conquer style) • 12345678 * 21394276 • 2639526 5276584 12145242 24279128 *108 + *104 + *104 + *1 = 264126842539128 • X = • Y = • X × Y = ac 10n + (ad + bc) 10n/2 + bd

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

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

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

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

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

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

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

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

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

More Related