[英]What would be the log(O(n * log(n)))?
我目前正在算法類中學習大O表示法,但偶然發現了困擾我的這個特殊問題。 如果我們知道形式定義成立,是否可以將O(n lg(n))表示為c * n * lg n? 意思是,如果f(n)<= c n lg n,並且該定義對於某些常數成立,則O(n lg n)可以表示為c * n * lg n? 如果我的假設是正確的,那么我們可以做:
= lg(O(n lg n))
= lg(c * n * lg n)
= lg(c)+ lg(n)+ lg(lg(n))
如果在這種情況下lg(n)是最高階項,那么這會簡化為O(lg(n))嗎? 由於所有低階項最終都將與高階項重疊?
您的問題有點難以理解。 我想你在問:
假設我們有一個函數
f
,它漸近地以O(n lg n)
的速率增長。 函數lg ∘ f
是否漸近地以O(lg n)
的速率增長?
是的,它確實。
更新:評論員保羅·漢金(Paul Hankin)提出了一個反例。 也許這是正確的嗎?
假設我們有一個函數
f
,它以O(n lg n)
的速率漸近增長。 函數lg ∘ f
是否以O(lg n)
的速率漸近增長?
我認為答案是肯定的。
您試圖證明lg(O(n lg n)) = O(lg n)
。 這有點非標准符號,但它意味着,對於所有f
在O(n lg n)
,有一個g
在O(lg n)
,使得log(f) = g
。 這在Wikipedia上進行了解釋: https : //en.wikipedia.org/wiki/Big_O_notation#Multiple_usages
該陳述並不完全正確。 例如, f = 2^(-n)
在O(n lg n)
,但是lg(f) = -n
不在O(lg n)
。 但是,如果我們將自己限制為大於1
f
,那么它是正確的。
如果f = O(n lg n)
,則存在一個c
,對於所有足夠大的n
, f(n) < cn lg n
。 然后lg(f(n)) < lg(c) + lg(n) + lg(lg(n)) = O(lg n)
。 由於lg(f(n)) > 0
,因此我們有了lg(f(n)) = O(lg n)
。 從本質上講,這是您從問題中得到的證明,同時對定義稍加注意,並確保lg(f(n))
既不大也不為負。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.