我正在使用快速排序,即NLog(N),并有20个要排序的项目。
最糟糕的情况是26.02 ......秒?真的,秒?我觉得很难相信,所以测量的长度是多少?
答案 0 :(得分:3)
Big O Notation没有单位。它不告诉你需要多长时间,也不会告诉你算法是快还是慢。所有Big O都会告诉你,当n变化时,它会如何缩放。
为N设置一个数字对Big O没有意义,它的目的不是给你一个数字,而是随着N变大而增长的速度有多快。想象一下,如果你把N加倍到40,那么你的数字将会增加两倍多。采用另一种算法,插入排序,具有O(N ^ 2)复杂度。从20 ^ 2到40 ^ 2的跳跃是巨大的,远远超过倍增。因此,我们可以看到,随着N的增加,插入排序与快速排序相比会逐渐变慢。这就是你可以从Big O中学到的东西,你不能说任何特定的N对于任何一个人来说有多快,甚至相对于彼此。
请记住,Big O表示法仅查看最高阶词。它忽略了较小的术语和常数因素。 N ^ 2 + N只是N ^ 2,因为第一项掩盖了第二项。 N + N + N只是N,因为它仍然只是线性增加,尽管它更陡峭。 N + 50只是N,因为50是一个常数因子,不会影响它随着N变大而如何缩放。
答案 1 :(得分:-1)
大O(在时间复杂度方面)告诉你关于绝对持续时间的任何信息。它只是说明解决问题所需的最长时间如何随问题大小而变化。它也仅限于大问题规模(渐近行为)。
话虽如此,但应该清楚的是,这是一个相当理论的措施,并不一定会告诉你有关实际软件性能的事情。
一些例子:
这是O(n)因为时间与大小呈线性关系:
n 1000 2000 3000 4000
t 5000 10000 15000 20000
这是O(n ^ 2):
n 1000 2000 3000 4000
t 0.001 0.004 0.009 0.016
最后这是O(1),但到目前为止仍然是这里考虑的问题大小的最差性能:
n 1000 2000 3000 4000
t 1e100 1e100 1e100 1e100