【发布时间】:2013-02-12 03:59:54
【问题描述】:
我编写了这段代码.. 我需要充分利用它.. 我真的需要计算斐波那契数的最佳性能.. 请帮忙..
我已经阅读了一些此类计算的代码,我认为我得到了最好的..
帮我解决这个问题.. plz..
ps:我真的需要 BigInteger.. 我会计算大量数字的斐波那契
ps2:我用这个算法计算了一些大数字,我得到了很好的响应时间..但我需要知道它是否可以更好
ps3:要运行此代码,您需要使用此 VM 参数 -Xss16384k (StackSize)
public class Fibonacci {
private static BigInteger[] fibTmp = { BigInteger.valueOf(0), BigInteger.valueOf(1) };
public static BigInteger fibonacci(long v) {
BigInteger fib = BigInteger.valueOf(0);
if (v == 1) {
fib = BigInteger.valueOf(1);
} else if (v == 0) {
fib = BigInteger.valueOf(0);
} else {
BigInteger v1 = fibonacci(v - 1);
BigInteger v2 = fibTmp[(int) (v - 2)];
fib = v1.add(v2);
}
synchronized (fibTmp) {
if (fibTmp.length - 1 < v)
fibTmp = Arrays.copyOf(fibTmp, (int) (v + 10));
fibTmp[(int) v] = fib;
}
return fib;
}
}
【问题讨论】:
-
这看起来像java。为了获得最佳性能,语言可能很重要。可以加个语言标签吗?
-
不..忘记语言..是算法性能..在这种情况下语言无关紧要! =)
-
一个更好的算法会更快,无论它是在什么语言或机器上实现的(当你得到足够大的数字时)。哦,渐近分析的乐趣和乐趣。
-
有一个 O(log n) 算法可以找到斐波那契数。其称为矩阵求幂法。你可以试试。 fusharblog.com/…
-
@AndroidDecoded 那是
O(log n)步骤。由于F(n)具有theta(n)位数,因此没有任何算法可以比O(n)位运算更好。
标签: performance algorithm fibonacci