我遇到了解决大the符号的问题。据我所知,大O符号表示最坏情况和上限,而Omega符号表示最佳情况和下限。
如果我给出了一个在O(nlogn)时间和Omega(n)运行的算法,我怎么能推断出Theta等于什么?我开始假设存在一个theta符号,当且仅当O和Omega相等时,这是真的吗?
答案 0 :(得分:0)
假设您的算法在f(x)
中运行。
f(x) = O(n*log(n))
表示x
足够高,有一些常量c1 > 0
,因此f(x)
始终小于c1*n*log(n)
{1}}。
f(x) = Omega(n)
表示x
足够高,有一些常数c2 > 0
,因此f(x)
会大于c2*n
1}}
所以你现在所知道的是,从某一点开始(x
足够大)你的算法运行速度会比c2*n
慢,而且慢于c1*n*log(n)
。
f(x) = Theta(g(x))
表示对于x
足够大的c3 > 0
和c4 > 0
以及c3*g(x) <= f(x) <= c4*g(x)
,这意味着f(x)
只会比g(x)
更快或更慢地运行常数因子。确实如此,f(x) = O(g(x))
和f(x) = Omega(g(x))
。
结论:只提供O和Omega,如果它们不相同,则无法得出Theta的含义。如果您有算法,您可以尝试看看O是否可能选得太高,或者Omega可能选择得太低。