0% found this document useful (0 votes)
159 views10 pages

Karatsuba's Algorithm: 6.006 Review Session

The document describes Karatsuba's algorithm for multiplying large numbers. It begins by explaining the naive O(n^2) algorithm. Karatsuba's insight was to break each number into halves and solve only 3 subproblems, rather than 4 as in the naive approach. This reduces the runtime to O(n^1.584), a significant improvement over O(n^2). An example is worked through to multiply 1234 * 4321 using Karatsuba's algorithm in a recursive, divide-and-conquer manner.

Uploaded by

Ron
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
159 views10 pages

Karatsuba's Algorithm: 6.006 Review Session

The document describes Karatsuba's algorithm for multiplying large numbers. It begins by explaining the naive O(n^2) algorithm. Karatsuba's insight was to break each number into halves and solve only 3 subproblems, rather than 4 as in the naive approach. This reduces the runtime to O(n^1.584), a significant improvement over O(n^2). An example is worked through to multiply 1234 * 4321 using Karatsuba's algorithm in a recursive, divide-and-conquer manner.

Uploaded by

Ron
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 10

Karatsubas

Algorithm
6.006 Review Session

Problem Statement
Given two n-digit long integers a and b in base
r, nd a b.
Weve always assumed this is a constant Dme
operaDon.
Makes life simpler.
Numbers are usually relaDvely small.
As well see, we can do mulDplicaDon relaDvely
fast.

Nave Algorithm
Using the algorithm we all love and know (the
one we were taught in grade school) will take

O(n2)
Would like to improve on this

Divide and Conquer


Lets try divide and conquer.
Divide each number into two halves.
x = xH rn/2 + xL
y = yH rn/2 + yL

Then:
xy = (xH rn/2 + xL) yH rn/2 + yL

= xHyHrn + (xHyL + xLyH)rn/2 + xLyL
RunDme?
T(n) = 4 T(n/2) + O(n)
T(n) = O(n^2)

Karatsubas Insight
Instead of 4 subproblems, we only need 3 (with
the help of clever insight).
Three subproblems:
a = xH yH
d = xL yL
e = (xH + xL) (yH + yL) a d

Then xy = a rn + e rn/2 + d
T(n) = 3 T(n/2) + O(n)
T(n) = O(nlog 3) = O(n1.584)

Worked Example
Compute 1234 * 4321.
Subproblems:
a1 = 12 * 43
d1 = 34 * 21
e1 = (12 + 34) * (43 + 21) a1 d1
= 46 * 64 a1 d1
Need to recurse

Worked Example
First subproblem:
a1 = 12 * 43
Subproblems:
a2 = 1 * 4 = 4
d2 = 2 * 3 = 6
e2 = (1+2)(4+3) a2 d2
= 11

Answer: 4 * 102 + 11 * 10 + 6 = 516

Worked Example
Second subproblem
d1 = 34 * 21
Subproblems:
a2 = 3 * 2 = 6
d2 = 4 * 1 = 4
e2 = (3+4)(2+1) a2 d2
= 11

Answer: 6 * 102 + 11 * 10 + 4 = 714

Worked Example
Third subproblem:
e1 = 46 * 64 a1 d1

Subproblems:

a2 = 4 * 6 = 24
d2 = 6 * 4 = 24
e2 = (4+6)(6+4) a2 d2
= 52

Answer: 24 * 102 + 52 * 10 + 24 - 714 - 516


= 1714

Worked Example
Final Answer:

1234 * 4321 = 516 * 104 + 1714* 102 + 714

= 5,332,114

You might also like