圖姆-庫克算法

圖姆 - 庫克算法  ， 有時也被稱爲Toom - 3算法 ， 由安德魯 · 圖姆命名 ， 他提出了這種算法的基本原理 ， 而斯蒂芬 · 庫克則最先用簡潔的形式描述並改進了這種算法 ， 將其作爲大整數的乘法算法 。 圖姆 - 庫克算法的原理是 ： 對於給定的兩個大整數和 ， 將和分成個較小的部分 ， 每個部分的長度爲 ， 並對這些部分執行運算 。 隨着的增長 ， 可以組合許多乘法子運算 ， 從而降低算法的整體複雜度 ， 然後再次使用圖姆 - 庫克算法遞歸計算乘法子運算 ， 依此類推 。 Toom - 3和圖姆 - 庫克兩個術語有時會被錯誤的混用 ， 但事實上Toom - 3只是圖姆 - 庫克算法在時的特例 。 Toom - 3將9次乘法降低至僅需5次 ， 使其在的時間裏運行 。 通常 ， Toom - 的時間複雜度爲 ， 其中 。 是在乘法子運算上花費的時間 ， 則是花費在對小常數進行的加法和乘法運算上的時間 。 著名的Karatsuba算法實際上是圖姆 - 庫克算法的特例 ， 在Karatsuba算法中 ， 原始乘數被拆分成兩個較小的數 ， 而原本的4次乘法運算縮減爲3次 ， 使之在的時間內完成運算 。 Toom - 1等價於普通的長乘法 ， 具有的複雜度 。 儘管可以通過增加來使指數任意接近1 ， 但函數增長速度非常快 。 混合級別圖姆 - 庫克算法的增長率直到2005年仍然是一個廣爲研究的開放性問題 。 根據高德納所描述算法的一種實現 ， 其複雜度可降低至 。 由於工作時的開銷 ， 當乘數包括較小的數時 ， 圖姆 - 庫克算法會比長乘法更慢 ， 因此它適用於中等規模的乘法 。 對於更大規模的數據 ， 則有漸進更快的史恩哈格 · 施特拉森算法 （ 複雜度爲 ） 。 這一算法由安德魯 · 圖姆1963年首次描述 ， 並在斯蒂芬 · 庫克1966年的博士學位論文中得到漸進等效的改進 。