See also ebooksgratis.com: no banners, no cookies, totally FREE.

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
Karatsuba法 - Wikipedia

Karatsuba法

出典: フリー百科事典『ウィキペディア(Wikipedia)』

Karatsuba法カラツバほう)とは、主に多倍長乗算において、乗算の使用回数を4分の3にするアルゴリズムである。 加減算の回数は増加するが、乗算コストはそれより遙かに大きいため、結果として演算コストそのものもほぼ4分の3となる。 発見者の名前を取ってKaratsuba法(Karatsuba-algorithm)、あるいは単にKaratsubaとも呼ばれる。

従来の乗算はO(n2)だったが、Karatsuba法の再帰的適用により、O(n^{\log_23})log23≒1.585)まで計算コストが抑えられる。


[編集] アルゴリズム

単純な例として、被乗数Xと乗数Yの積Zを求める(Z = X \times Y)。 まず、被乗数Xと乗数Yをそれぞれ上位・下位の2つに分割する。 分割の基数をb(例えば3桁ずつに分割するならb: = 1000)とすると、

X := x_1 \cdot b + x_0
Y := y_1 \cdot b + y_0
Z := z_2 \cdot b^2 + z_1 \cdot b + z_0

この乗算をKaratsuba以前の方法で行うと、乗算を4回行うことになる。

z_2 := x_1 \times y_1
z_0 := x_0 \times y_0
z_1 := x_1 \times y_0 + x_0 \times y_1

Karatsubaの方法では、乗算を3回で済ませられる。

z_1 := z_2 + z_0 - (x_1 - x_0) \times (y_1 - y_0)

[編集] 計算例

X = 32,463 (x1: = 32,x0: = 463)Y = 38,030 (y1: = 38,y0: = 30)b = 1000 とすると、

z2: = x1y1 = 1216
z0: = x0y0 = 13890
z1: = z2 + z0 − (x1x0)(y1y0) = 1216 + 13890 − ( − 431)(8) = 18554
Z = 1216b2 + 18554b + 13890 = 1,216,000,000 + 18,554,000 + 13,890 = 1,234,567,890


aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -