算法数学 - 我如何解决和替代?

时间:2014-10-23 13:57:33

标签: algorithm math

我无法理解算法背后的基本数学。例如,这是一个问题:

如果

  

f(n)= O(g(n))

  

f(n)* log(f(n)^ c)= O(g(n)* log(g(n)))

我该如何回答这个问题?根据我目前的理解,仅当g(n)<= c(g(n))并且c和n是非负的时,f(n)= O(g(n))。所以我需要根据它开始将值插入上面,但是我该怎么做呢?假设我选择了c = 5和n = 2,我会像这样插入值:f(2)* log(f(2)^ 5)= 5(g(2)* log(g(2)))这是否意味着原始问题的答案是错误的?

2 个答案:

答案 0 :(得分:0)

你可以这样做:

f(n) * log(f(n)^c) = c * f(n) * log(f(n)) = O(1) * O(g(n)) * log(O(g(n))) = O(1) * O(g(n)) * O(log(g(n))) = O(g(n) * log(g(n))

所以问题的答案是真的。这里你需要的只是对数函数的属性。

这里有一个步骤不明确:为什么log(O(g(n))) = O(log(g(n)))
证明:如果f(n) = O(g(n)),则会有一个常数C,以便足够大n f(n) <= C * g(n)。因此,log(f(n)) <= log(C * g(n)) = log(g(n)) + log(C)。我们可以使用C2 = 2并获取足够大log(f(n)) <= C2 * log(g(n))的{​​{1}}。

答案 1 :(得分:0)

通过f(n)= O(g(n)),你的意思是

存在k,使得对于某些n> = N_1,f(n)<= k.g(n)。 ----- 1

表示对于n的log(f(n)^ c)&lt; = log(k ^ c)+ log(g(n)^ c)&lt; = K * log(g(n)^ c) ; = N_2,K = max {log(k ^ c),2} ----- 2

通过乘以1和&amp;给我们所需的答案。 2

f(n)* log(f(n)^ c)= O(g(n)* log(g(n)))。