划分和征服计算根的方法

时间:2010-04-12 18:43:47

标签: algorithm math computer-science performance

知道我们可以使用Divide-and-Conquer算法来计算大指数,例如2 exp 100 = 2 exp(50) * 2 exp(50),这是非常有效的,这种方法是否有效使用根?例如2 exp (1/100) = (2 exp(1/50)) exp(1/50)

换句话说,我想知道(n exp(1/x)) (n exp(1/y)) x < y对{{1}}更高效,而x和y是整数。

2 个答案:

答案 0 :(得分:1)

当你有非整数指数时,我不认为使用分而治之的方法。我假设使用泰勒多项式将x ^ y计算为e ^(y ln(x))。您可以使用除法和征服计算y的整数部分,然后将其乘以实部。但是将它分成两部分是没有意义的。也:

2 exp(1/100)=(2 exp(1/50))exp(1/50)

事实并非如此。

(2 exp(1/50))exp(1/50)= 2 exp(1/50 + 1/50)= 2 * exp(1/25)!= 2 exp(1/100)

你会这样做:

2 exp(1/100)= 2 * exp(1/200)* exp(1/200)

答案 1 :(得分:0)

由于x,y的浮点数exp(1/x)可能不比exp(1/y)更有效x<y

但分而治之的算法就是

如果我们有类似exp(1/x)的内容,我们就不会再计算它,即我们将2^N划分为两个相同的较小尺寸问题2^(N/2) * 2^(N/2),我们计算2^(N/2) 只有一次

同样,exp(2/x)可以划分为exp(1/x)*exp(1/x),我们只需计算一次exp(1/x)。这应该可以提高性能。

分母中较小的数字也应该有所帮助。

所以我认为这应该可行。