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