我看到O(2n)的证明与此帖子中的O(n)相同=> Which algorithm is faster O(N) or O(2N)? 这意味着O(n)与O(4n)相同。
有人能告诉我O(n)不是O(n log n)的子集吗?
因为,如果n = 16且base = 2,O(n log n)将为O(n * 4),这应该是O(n)?
我知道上面的陈述是错误的。但不确定哪一部分。请澄清一下。
答案 0 :(得分:2)
因为,如果n = 16且base = 2,O(n log n)将为O(n * 4),这应该使它成为O(n)?
这是对O(n log n)
的含义的基本误解。
O(n log n)
是一组功能。直观地说,它是所有函数{g(n)}
的集合,其中g(n)
与f(n) = n log n
成比例。
(有一个严格的数学定义是什么"比例"意味着处理尴尬的边缘情况,但你需要理解"限制" ......这是相对高级的数学。 ..理解定义。)
你正在用一个值代替参数......这在数学上是没有意义的。从表面上看,您评估 O(n log n)
作为n
某些值的函数。如果O(...)
表示函数,那可能是有意义的。但它并没有。
Big O是一组数学符号,用于以特定方式与给定函数相关的一组函数。并且(直观地)关系是关于n
变大时会发生什么。您可以用n
替换特定值,并保留符号的含义。
(你所做的事情与取消x
中的 d(x.x)
------
dx
一样具有数学意义:
users
user1
nodeA
nodeToBeMoved
content : content1
date : date1
user2
nodeB
...或其中一个男生"证明"那个是零,需要除零。)
为了更深入地了解为什么你的替代是毫无意义的,请查看Big Oh符号的更正式定义;例如在Wikipedia。如果你知道有什么限制。
答案 1 :(得分:0)
你不能说n = 16。然后你将它视为常数。 n是一个变量。
看看O(n²)。如果n = 16,那么O(n²)= O(16 * n)= O(256)= O(1)
它适用于任何复杂性。考虑O(n!),就像旅行推销员一样。如果n = 16,则O(n!)= O(16!)= O(巨大常数)= O(1)
此外,正如chepner所指出的,O(n)是O的一个子集(n log n)。你真正的问题是集合O(n)和O(n log n)是否相等,它们不是。