我试图分析karatsuba算法乘以m和n数字整数。据我所知,如果将整数分为m / 2和n / 2位子问题,那将是最有效的。问题如下: -
在这种情况下我们可以应用高斯技巧吗?我们是否需要进行一些调整才能应用它。填充较小的整数以匹配大小可能是一种解决方案,但它会影响我的运行时间。
在karatsuba算法中,应用高斯技巧即(a + b)*(c + d)需要T(n / 2 +1),因为子问题的大小可能增加1位。我可以通过哪种方式将子问题的大小限制为严格的n / 2。
答案 0 :(得分:0)
实际上,使用Master方法的Karatsuba算法复杂度为T(n)= 3 * T(n / 2)+ O(n),
其中N是数字长度的最大值。 实际上,即使1个数字的一个子问题的大小更大,也不在乎。因为它只是小常数。
另外,我不确定,你在说什么高斯技巧?通常这是一个技巧,我们将第一个数字分成两个部分(a,b)和第二个数字部分(c,d)。
所以(10 ^(n / 2)* a + b)*(10 ^(n / 2)* c + d)= 10 ^ n * a * c + 10 ^(n / 2)* a * d + 10 ^(n / 2)* b * c + b * d;
所以,我们需要计算 ac , bd 和 ad + bc =(a + b)*(c + d) - ac - bd。所以我们只需计算3个较小尺寸的产品。而且,是的 - 我们可以在Karatsuba算法中应用它。
有关更多信息,请查看Standford Univercity(http://openclassroom.stanford.edu/MainFolder/VideoPage.php?course=IntroToAlgorithms&video=CS161L1P9)
的讲座