名古屋工業大学 工学研究科 情報工学専攻 2012年度 計算機ソフトウェア I
Author
祭音Myyura
Description
n を 2 のべき乗とする。二つの n ビット二進数
An=an−1,an−2,…,a0,Bn=bn−1,bn−2,…,b0
の乗算に必要な時間計算量を M(n)、加算に必要な時間計算量を S(n) とする。
(1)
An,Bn がそれぞれ大きさ n の配列 A[0],…,A[n−1] と B[0],…,B[n−1] に格納されているとする。ただし、
A[i],B[i]∈{0,1}(0≤i≤n−1)
である。An と Bn の和を大きさ n+1 の配列 R[0],…,R[n] に格納する。また、各 i(0≤i≤n−1)について、i 桁目からの桁上げの結果を C[i+1] に格納する。
C[i](1≤i≤n)および R[i](0≤i≤n)を、それぞれ A,B,C の要素を用いて表せ。それを利用して、S(n)=O(n) を示せ。
(2)
An≥Bn とする。An−Bn の減算に必要な時間計算量を D(n) とするとき、D(n)=O(n) を示せ。
(3)
上位・下位の各 n/2 ビットを
An/2UBn/2U=an−1,…,an/2,=bn−1,…,bn/2,An/2LBn/2L=a(n/2)−1,…,a0,=b(n/2)−1,…,b0
とする。再帰的な乗算アルゴリズムを記述し、
M(n)≤4M(n/2)+3S(2n)+O(n)
となることを示して、M(n)=O(n2) を証明せよ。
(4)
次の等式
An/2UBn/2L+Bn/2UAn/2L=(An/2U+An/2L)(Bn/2U+Bn/2L)−An/2UBn/2U−An/2LBn/2L
を利用して、M(n)=o(n2) を示せ。
Kai
(1)
C[0]=0 とおく。各桁について、和と次の桁への桁上げは
C[i]=⌊2A[i−1]+B[i−1]+C[i−1]⌋(1≤i≤n)
で求まる。また、
R[i]=(A[i]+B[i]+C[i])mod2(0≤i≤n−1),
R[n]=C[n]
である。各 i に対する演算回数は定数であり、これを n 桁について行うので、
S(n)=O(n)
となる。
(2)
T[i]∈{0,1} を i 桁目へ入る借りとし、T[0]=0 とする。各 i=0,…,n−1 について
xi=A[i]−B[i]−T[i]
を計算し、
(R[i],T[i+1])={(xi,0),(xi+2,1),xi≥0,xi<0
とすればよい。各桁で定数回の演算しか行わないため、
D(n)=O(n)
である。
(3)
h=n/2 とおくと、
An=2hAhU+AhL,Bn=2hBhU+BhL
である。次の四つを再帰的に計算する。
P0=AhLBhL,P1=AhUBhL,P2=AhLBhU,P3=AhUBhU.
すると、積は
AnBn=2nP3+2h(P1+P2)+P0
である。桁ずらしは O(n)、四つの 2n ビット以下の数をまとめる加算は 3 回で済む。したがって、
M(n)≤4M(n/2)+3S(2n)+O(n)=4M(n/2)+O(n).
この漸化式にマスター定理を適用すると、
M(n)=O(nlog24)=O(n2)
を得る。
(4)
まず
P0=AhLBhL,P2=AhUBhU
を計算し、さらに
P1=(AhU+AhL)(BhU+BhL)−P2−P0
を計算する。これにより、積は
AnBn=2nP2+2hP1+P0
となり、再帰的な乗算は 3 回で済む。二つの半分の和は高々 n/2+1 ビットなので、加減算と桁ずらしも含めて厳密には
M(n)≤3M(n/2+1)+O(n)
と評価できる。F(n)=M(n+2) とおけば F(n)≤3F(n/2)+O(n) となるので、マスター定理より
M(n)=O(nlog23).
log23<2 であるから、
n2M(n)=O(nlog23−2)⟶0
であり、
M(n)=o(n2)
となる。
4 ビット整数の全組合せについて、四分割による式と上の 3 回乗算による式をプログラムで計算し、いずれも通常の整数積と一致することを確認した。