简单地说,时间复杂度是一种总结算法的操作数量或运行时间如何随着输入大小的增加而增长的方式。
就像生活中的大多数事情一样,鸡尾酒会可以帮助我们理解。
O(N)
当你到达派对时,你必须和每个人握手(每件事都要做一次操作)。随着出席人数N的增加,你与每个人握手的时间/工作时间也随着O(N)的增加而增加。
为什么是O(N)而不是cN?
与人握手所用的时间各不相同。你可以把它平均出来,用常数c来表示。但这里的基本操作——和每个人握手——总是与O(N)成正比,不管c是多少。当我们讨论是否应该参加鸡尾酒会时,我们通常更感兴趣的是我们必须与每个人见面,而不是那些会面的细节。
O (N ^ 2)
鸡尾酒会的主人想让你玩一个愚蠢的游戏,让每个人都遇见其他人。因此,你必须会见N-1个人,因为下一个人已经见过你,他们必须会见N-2个人,以此类推。这个级数的和是x^2/2+x/2。随着参与者人数的增加,x^2项很快就变大了,所以我们就把其他的都丢掉了。
O (N ^ 3)
你必须和其他人见面,在每次会议期间,你必须谈论房间里的其他人。
O(1)
主持人想宣布一件事。他们敲着酒杯大声说话。每个人都能听到。事实证明,不管有多少参与者,这个操作总是花费相同的时间。
O(对数 N)
主人已经把每个人按字母顺序排列在桌子上。丹在哪里?你推断他一定在亚当和曼迪之间(当然不是在曼迪和扎克之间!)。鉴于此,他在乔治和曼迪之间吗?不。他肯定在亚当和弗雷德之间,在辛迪和弗雷德之间。等等……我们可以有效地定位丹,只需要看一半的集合,然后再看一半的集合。最终,我们观察O(log_2 N)个个体。
O(nlogn)
您可以使用上面的算法找到在桌子旁的位置。如果有很多人来到这张桌子前,一次一个,所有人都这样做,这将花费O(nlog N)个时间。结果证明,这是对必须进行比较的项目集合进行排序所需的时间。
最好/最坏情况
你到达了派对,需要找到伊尼戈——需要多长时间?这取决于你什么时候到。如果每个人都在周围转悠,你就遇到了最坏的情况:将花费O(N)时间。然而,如果每个人都坐在桌子旁,只需要O(log N)时间。或者你可以利用主持人的酒杯呐喊能力,这样只需要O(1)时间。
假设主机不可用,我们可以说inigo查找算法的下界为O(log N),上界为O(N),这取决于您到达时聚会的状态。
空间与通信
同样的想法也可以应用于理解算法如何使用空间或通信。
Knuth写了一篇关于前者的好论文,题为《歌曲的复杂性》。
定理2:存在复杂度为O(1)的任意长歌曲。
证据:(由于凯西和阳光乐队)。考虑一下Sk用(15)定义的歌曲,但是用
V_k = 'That's the way,' U 'I like it, ' U
U = 'uh huh,' 'uh huh'
对于所有的k。