L6 Large Number Multi
L6 Large Number Multi
2X2=5
Time complexity of
addition
***********
+ *********** T(n) = The amount of
time addition uses to
***********
add two n-bit
numbers
************
T(n) = Θ(n)
Time complexity of
school multiplication
X ********
********
T(n) = The amount of
********
********
******** time grade school
********
n2 ********
********
multiplication uses to
********
******** add two n-bit
****************
numbers
Addition is
linear time.
x1011
1001
------
1011
0000
0000
1011
-----------
1100011
Peasant multiplication
n bits
X= a X b
Y= c Y d
n/2 bits n/2 bits
X = a 2n/2 + b Y = c 2n/2 + d
n digits
X= a b
Y= c d
n/2 digits n/2 digits
X = a 10n/2 + b Y = c 10n/2 + d
12345678 * 21394276
X= a b
Y= c d
X × Y = ac 10n + (ad + bc) 10n/2 + bd
Multiplying (Divide & Conquer style)
12345678 * 21394276
X= a b
Y= c d
X × Y = ac 10n + (ad + bc) 10n/2 + bd
Multiplying (Divide & Conquer style)
12345678 * 21394276
X= a b
Y= c d
X × Y = ac 10n + (ad + bc) 10n/2 + bd
Multiplying (Divide & Conquer style)
12345678 * 21394276
X= a b
Y= c d
X × Y = ac 10n + (ad + bc) 10n/2 + bd
Multiplying (Divide & Conquer style)
12345678 * 21394276
X= a b
Y= c d
X × Y = ac 10n + (ad + bc) 10n/2 + bd
Multiplying (Divide & Conquer style)
12345678 * 21394276
X= a b
Y= c d
X × Y = ac 10n + (ad + bc) 10n/2 + bd
Multiplying (Divide & Conquer style)
12345678 * 21394276
X= a b
Y= c d
X × Y = ac 10n + (ad + bc) 10n/2 + bd
Multiplying (Divide & Conquer style)
12345678 * 21394276
X= a b
Y= c d
X × Y = ac 10n + (ad + bc) 10n/2 + bd
Multiplying (Divide & Conquer style)
12345678 * 21394276
X= a b
Y= c d
X × Y = ac 10n + (ad + bc) 10n/2 + bd
Multiplying (Divide & Conquer style)
12345678 * 21394276
X= a b
Y= c d
X × Y = ac 10n + (ad + bc) 10n/2 + bd
Multiplying (Divide & Conquer style)
12345678 * 21394276
X= a b
Y= c d
X × Y = ac 10n + (ad + bc) 10n/2 + bd
Multiplying (Divide & Conquer style)
12345678 * 21394276
X= a b
Y= c d
X × Y = ac 10n + (ad + bc) 10n/2 + bd
Multiplying (Divide & Conquer style)
12345678 * 21394276
2 1*1
1*2 1 2*2
4 2
2*1 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
X= a b
Y= c d
X × Y = ac 10n + (ad + bc) 10n/2 + bd
Multiplying (Divide & Conquer style)
12345678 * 21394276
2 1*1
1*2 1 2*2
4 2
2*1 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
X= a b
Y= c d
X × Y = ac 10n + (ad + bc) 10n/2 + bd
Multiplying (Divide & Conquer style)
12345678 * 21394276
X= a b
Y= c d
X × Y = ac 10n + (ad + bc) 10n/2 + bd
Multiplying (Divide & Conquer style)
12345678 * 21394276
1*3 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
1*9 2*3 2*9
X= a b
Y= c d
X × Y = ac 10n + (ad + bc) 10n/2 + bd
Multiplying (Divide & Conquer style)
12345678 * 21394276
3 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
9 6 18
*102 + *101 + *101 + *1
X= a b
Y= c d
X × Y = ac 10n + (ad + bc) 10n/2 + bd
Multiplying (Divide & Conquer style)
12345678 * 21394276
3 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
9 6 18
*102 + *101 + *101 + *1
X= a b
Y= c d
X × Y = ac 10n + (ad + bc) 10n/2 + bd
Multiplying (Divide & Conquer style)
12345678 * 21394276
252 12*39
12*21 468 714 34*39
34*21 1326 xxxxxxxxxxxxxxxxxxxxxxxxx
X= a b
Y= c d
X × Y = ac 10n + (ad + bc) 10n/2 + bd
Multiplying (Divide & Conquer style)
12345678 * 21394276
252 12*39
12*21 468 714 34*39
34*21 1326 xxxxxxxxxxxxxxxxxxxxxxxxx
*10 + *10 + *10 + *1
4 2 2
X= a b
Y= c d
X × Y = ac 10n + (ad + bc) 10n/2 + bd
Multiplying (Divide & Conquer style)
12345678 * 21394276
252 12*39
12*21 468 714 34*39
34*21 1326 xxxxxxxxxxxxxxxxxxxxxxxxx
*10 + *10 + *10 + *1
4 2 2
= 2639526
X= a b
Y= c d
X × Y = ac 10n + (ad + bc) 10n/2 + bd
Multiplying (Divide & Conquer style)
12345678 * 21394276
X= a b
Y= c d
X × Y = ac 10n + (ad + bc) 10n/2 + bd
Multiplying (Divide & Conquer style)
12345678 * 21394276
X= a b
Y= c d
X × Y = ac 10n + (ad + bc) 10n/2 + bd
Multiplying (Divide & Conquer style)
12345678 * 21394276
X= a b
Y= c d
X × Y = ac 10n + (ad + bc) 10n/2 + bd
Multiplying (Divide & Conquer style)
12345678 * 21394276
= 264126842539128
X= a b
Y= c d
X × Y = ac 10n + (ad + bc) 10n/2 + bd
Divide, Conquer, and Glue
MULT(X,Y):
X=a;b Y=c;d
Divide, Conquer, and Glue
MULT(X,Y):
X=a;b Y=c;d
MULT(X,Y):
X=a;b Y=c;d
Mult(a,c)
Divide, Conquer, and Glue
MULT(X,Y):
X=a;b Y=c;d
ac
ac
Mult(a,d) Mult(b,c) Mult(b,d)
Divide, Conquer, and Glue
MULT(X,Y):
X=a;b Y=c;d
ac,
ac
Mult(b,c) Mult(b,d)
Mult(a,d)
Divide, Conquer, and Glue
MULT(X,Y):
X=a;b Y=c;d
ac, ad,
ac
ad Mult(b,d)
Mult(b,c)
Divide, Conquer, and Glue
MULT(X,Y):
X=a;b Y=c;d
ac, ad,
ac
ad Mult(b,d)
Mult(b,c)
Divide, Conquer, and Glue
MULT(X,Y):
X=a;b Y=c;d
ac, ad, bc,
ac bc
ad Mult(b,d)
Divide, Conquer, and Glue
MULT(X,Y):
X=a;b Y=c;d
ac, ad, bc,
ac bc
ad
Mult(b,d)
Divide, Conquer, and Glue
XY =
ac2n
+(ad+bc)
MULT(X,Y): 2n/2
X=a;b Y=c;d + bd
ac, ad, bc, bd
ac bd
ad bc
Time required by MULT
X=a;b Y=c;d
ac bd
ad bc
ac bd
ad bc
T(1) = c3
T(n) = 4 T(n/2) + c1 n + c2
T(1) = 1
T(n) = 4 T(n/2) + n
We visualize the
recursion as a tree,
where each node
represents a
recursive call. The
root is the initial call.
Leaves correspond to
the exit condition.
T(n) = 4 T(n/2) + n
T(n)
. . . . . . . . . . . . . . . . . . . . . . . . . .
log2n
1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+ 1+1+1+1+1+1+1+1+1+1+1+1
= n*n
In 1962 Karatsuba
had formulated the
first algorithm to
break n2 barrier!
Multiplication of 2 n-bit numbers
X = a 2n/2 + b Y = c 2n/2 + d
X × Y = ac 2n + (ad + bc) 2n/2 + bd
z1 = (a + b) (c + d) = ac + ad + bc + bd
z2 = ac
z3 = bd
z4 = z2 – z3 = ac - bd
z5 = z1 – z2 – z3 = ad + bc
X × Y = z2 2n + z5 2n/2 + z3
Karatsuba (1962)
T(1) = 1
T(n) = 3 T(n/2) + n
n/2
T(n/2) T(n/2)
T(n/4)T(n/4)T(n/4)
T(n) = n
. . . . . . . . . . . . . . . . . . . . . . . . . .
log2n 1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
0 n = 1n
1 n/2 + n/2 + n/2 = 3/2n
2 n/4 + n/4 + n/4 + n/4 + n/4 + n/4 + n/4 + n/4 + n/4 = 9/4n
. . . . . . . . . . . . . . . . . . . . . . . . . .
log2n
1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+ 1+1+1+1+1+1+1+1+1+1+1+1
= (3/2)log n n
(3/2) × (3/2)log2 n - 1
= 3 × (3log2 n/2log2 n) - 2
½
= 3 × (3log2 n/n) - 2
Dramatic improvement for large n
f(n)
a nodes
f(n/b) f(n/b) f(n/b) f(n/b)
T(n) = p T(n/3) + n
where p>0.
T(n) = p T(n/3) + n
T(n) = p T(n/3) + n
T(n) = Θ (n log3 p)
when p>3.
T(n) = p T(n/3) + n
If p =3, then
T(n) = Θ (n log n)
3-Way Multiplication
X = a1 2n/4 + a2 2n/2 + a3
Y = b1 2n/4 + b2 2n/2 + b3
T(1) = 1
T(n) = 9 T(n/3) + n
3-Way Multiplication
T(n) = p T(n/3) + n
T(n) = Θ(nlog3p)
T(1) = 1
T(n) = 5 T(n/3) + n
X = a1 2n/4 + a2 2n/2 + a3
Y = b1 2n/4 + b2 2n/2 + b3
Grade School n2
Karatsuba n1.58…
3-way n1.46…
FFT n log2n