我已经实现了两个字节数组的乘法,它工作正常。更确切地说,我需要将一个64字节的操作数与一个32字节的操作数相乘。字节数组Karatsuba乘法优化
我实现了它最简单的方法:我做了一个双循环,并计算每个数组中每个字节的产品。 因此,对于具体的值,它需要64 * 32 = 2048
步骤。
我试图用Karatsuba
方法对其进行优化。 所以我按照以下方式进行:
a
的长度为64字节,而b
的长度为32字节。 a = p * 16^(32) + q
(所以p
和q
兼得的32个字节的长度)和计算:a * b = p * b * 16^(32) + q * b
(与之前描述了我的函数的产品计算)
我们在分裂a
。
我得到正确的结果,但它需要相同的时间来计算:两个32字节数组的乘法:32 * 32 * 2 = 64 * 32 = 2048
。
我的问题是以下内容:使用Karatsuba
优化我的乘法,我应该完全递归编程吗?以其他方式永远不会更快?
谢谢您提前:) :)
为什么不使用'BigInteger'来表示大数? – isnot2bad
那么,我编程它在Java测试我的电脑,但目的是要切换它在Java卡 – Raoul722
你通常应该递归编程,直到你得到足够小的子问题,迭代解决它们会比递归解决它们更快(即对于Karatsuba而言,额外增加的成本将超过少一倍的收益)。对于Karatsuba乘法,截止点可能应该是三位或四位数字,但它可能会根据您的实现而有所不同(例如,这适用于Timsort的不同问题)。 –