1. 程式人生 > >演算法與設計經典題:大整數乘法(教材2-4)

演算法與設計經典題:大整數乘法(教材2-4)

給定兩個整數u和v,他們分別有m和n為數字,且m≤n,用通常的乘法求uv的值需要O(mn)時間,可以將u和v均看作是有n位數字的大整數,用本章介紹的分治法,在O(n^(log3))時間內計算uv的值,當m<<n時,此法效率不高。設計演算法在O(nlog2/3)時間計算uv的值

在O(n^(log3))時間內計算,把u,v分成兩段,如分治法書中內容

uv=AC2^(n)+((A-B)(D-C)+AC+BD)2^(n/2)+BD

此時做三次n/2位的乘法,6次加減法和2次移位

此時符合第一問

第二問,當m比n小的多,就把n分成n/m段,所以就相當於一共有n/m次,計算m位乘法運算

由第一問得,O(n^(log3))為計算m為所需的

所以n/m次,就相城,化簡為第二問所要求的演算法時間複雜度