这是我们必须计算给定函数的时间复杂度的问题
f(i) = 2*f(i+1) + 3*f(i+2)
For (int i=0; i < n; i++)
F[i] = 2*f[i+1]
我认为这种算法的复杂性是O(2 ^ n)+ O(n),最终是O(2 ^ n)。 如果我错了,请纠正我?
答案 0 :(得分:0)
首先,您将来需要处理这些信息的所有信息都是here。
回答你的问题。因为你没有根据我自己提供f(i)的定义,所以不可能从你上面所写的内容中确定实际的复杂性。但是,通常用于像
这样的循环for (i = 0; i < N; i++) {
sequence of statements
}
执行N次,因此语句序列也执行N次。如果我们假设语句是O(1),则for循环的总时间是N * O(1),总体上是O(N)。在你的情况下,如果我冒昧重写它
f(0) = 0;
f(1) = 1;
f(i+2) = 2*f(i+1) + 3*f(i)
for (int i=0; i < n; i++)
f[i] = 2*f[i+2]
然后我们有一个明确定义的操作序列,应该清楚n操作的复杂性,就像我上面给出的例子,n * O(1),即O(n)。
我希望这会有所帮助。