一、给定 2 2 2 个大整数 u u u 和 v v v,它们分别有 m m m 位和 n n n 位数字,且 m ≤ n m\le n m≤n。 当 m m m 比 n n n 小很多时,设计一个算法用 O ( n m log ( 3 / 2 ) ) O(nm^{\log(3/2)}) O(nmlog(3/2))时间求出 u v uv uv 的值。说明分析思路,写出伪代码,并写出算法复杂度分析过程。
解:
-
为便于分析,做出如下假设:
-
假设 u u u 和 v v v 均为二进制整数;
-
假设 n n n 是 m m m 的整数倍;
-
假设 m m m 是 2 2 2 的幂.
-
-
如果 m m m 比 n n n 小很多,则可以将 v v v 分为 n m \frac{n}{m} mn 段,每段的长度为 m m m 位,则:
u v = u ( a 1 + a 2 2 m + a 3 2 2 m ⋯ + a n m 2 n − m ⏟ n m 个 ) uv=u(\underbrace {a_1+a_22^m+a_32^{2m} \cdots+a_{\frac{n}{m}}2^{n-m}}_{ \frac{n}{m}个}) uv=u(mn个