我只是遇到了这个奇怪的发现,在正常的数学中,n * logn小于n,coz log n始终小于1。 那么为什么O(nlog(n))大于O(n)? (即为什么nlogn被认为比n花更多的时间)
Big-O是否采用其他系统?
答案 0 :(得分:6)
绘制两个图(在desmos(https://www.desmos.com/calculator)或任何其他网络上),并在大n值(y = f(n))上查找结果。我是说您应该寻找较大的值,因为对于较小的n值,程序将没有时间问题。为了方便起见,我在下面附上了一个图表,您可以尝试使用其他日志基础。
红色代表时间= n,蓝色代表时间= nlog(n)。
答案 1 :(得分:4)
那不是事实。 log b n > 1表示 n > b 。例如,log 2 32 = 5。
答案 2 :(得分:0)
此图可能会有所帮助。 log(n)的上升速度快于n,并且大于n的对数大于n则大于1。 https://stackoverflow.com/a/7830804/11617347
答案 3 :(得分:0)
Log(n)可以大于1。但这并不能回答您为什么O(n * logn)大于O(n)的问题。
通常,底数小于4。因此,对于更高的n,n * log(n)会大于n。这就是为什么O(nlogn)> O(n)。
答案 4 :(得分:0)
原来,我误解了Logn小于1。 当我问几个年长者时,我今天自己就知道这一点,即如果n的值很大(通常在考虑大O时,即最坏的情况),logn可以大于1。 >
是的,
O(1) (我认为这是一个愚蠢的问题,也打算将其删除,但是后来意识到,没有问题是愚蠢的问题,可能会有其他人对此感到困惑,所以我把它留在了这里。)
答案 5 :(得分:0)
无论两个函数在&{ ... }
的较小值上如何工作,只要n
足够大,它们就会相互比较。从理论上讲,存在一个n
,这样对于每个给定的N
,然后是n > N
。如果选择nlogn >= n
,则N=10
总是大于nlogn
。
答案 6 :(得分:0)
在计算机中,它是以2为底的日志,而不是以10为底。因此log(2)为1,而log(n)为n(大于2)是一个大于1的正数。 仅在log(1)的情况下,我们的值小于1,否则,它的值大于1。
答案 7 :(得分:0)
对于更高的 log n 值,它变得大于 1。当我们考虑 n 的所有可能值时,我们可以说在大多数情况下 log n 大于 1。因此我们可以说 O(nlogn) > O( n)(假设更高的值)