【问题标题】:Divide and conquer method to compute roots分治法计算根
【发布时间】:2010-04-12 18:43:47
【问题描述】:

知道我们可以使用分治算法来计算大指数,例如2 exp 100 = 2 exp(50) * 2 exp(50),它的效率相当高,那么这种方法使用根是否有效?例如2 exp (1/100) = (2 exp(1/50)) exp(1/50)?

换句话说,我想知道对于x < y(n exp(1/x)) 是否比(n exp(1/y)) 更有效,其中 x 和 y 是整数。

【问题讨论】:

  • 可能不会。您在这里处理的是浮点数而不是整数...
  • 嗯,这就是我想知道的:对于 x
  • @hellsoul153 你可以在mathoverflow.net问这个问题
  • 根据他们的常见问题解答,MathOverflow 是针对研究级问题的,但事实并非如此。
  • 带“n exp(x)”的意思是“nx”吗?

标签: algorithm math computer-science performance


【解决方案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)

【讨论】:

  • 他似乎用“exp”表示别的东西(非标准)。
  • 好吧,即使他的意思是指数运算符,他写2^(1/100)=2^(1/50)2^(1/50)时仍然是错误的。它仍然必须是 2^(1/100)=2^(1/200) 2^(1/200)。我实际上想不出一个会影响他的方式的手术。
【解决方案2】:

因为x,y 是浮点数,所以exp(1/x) 对于所有x<y 来说可能并不比exp(1/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)。这应该会提高性能。

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

所以我认为这应该可以正常工作。

【讨论】:

  • 我不确定。获得答案的最佳方法是使用适当的库。我只是认为许多问题在这里被忽视并被掩盖了。应用数学是一门令人兴奋的学科,但也可能很难。我认为我们在这里过度简化了答案。另外,我会使用一个库来计算指数,而不是自己做。
  • 好吧,那是我的问题,抱歉我的例子中的数学错误:P
猜你喜欢
  • 2017-08-12
  • 2020-01-30
  • 2013-02-12
  • 2013-10-30
  • 1970-01-01
  • 2021-05-06
  • 2012-10-28
  • 2017-04-07
  • 2021-03-11
相关资源
最近更新 更多