我无法理解算法背后的基本数学。例如,这是一个问题:
如果
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)))这是否意味着原始问题的答案是错误的?
答案 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)))。