for循环插入排序

时间:2012-03-13 02:39:26

标签: algorithm

这是关于“算法导论”一书中对插入排序的分析。它表示跟随for循环执行n(= A.length)次:

for j = 2 to A.length 
....

有谁能告诉我为什么这个循环执行n次而不是n-1次?

谢谢, 内甚

5 个答案:

答案 0 :(得分:0)

在分析算法的运行时间时,通常的做法是将事情进行四舍五入。如果N大得多,那么1不会有所作为。算法的分析仅针对样本空间巨大的问题。如果要对具有200万个整数的数组进行排序,该怎么办?如果循环运行1,999,999次,那会有什么不同吗?所以如果循环运行N-1次或N + 1次它是N.我希望我说清楚。

答案 1 :(得分:0)

您的书可能会说它会在O(n)时间内执行,而不是n次。它可能还包含一个关于算法运行时分析和O-notation的章节(您可能已跳过)。

长话短说,渐近分析常数无关紧要:O(cn+k) = O(n),其中ck是常数。

答案 2 :(得分:0)

你的意思是O(N)还是说它只会是n次。当你得到非常大的数量时,在估算运行时间时,运行一百万次或一百万减去一次可以相同的方式推广。因此,运行n-1次的东西大约需要运行n次的东西。

答案 3 :(得分:0)

假设数组索引是从1开始的(本书使用此约定的AFAIR),那么循环确实执行n - 1次。然而,在算法复杂度方面,对于最坏情况分析(大哦),事情通常被四舍五入(去除常数乘法器/加法器)。我相信这本书陈述了O(n)而不是n。

答案 4 :(得分:0)

我找到了自己的答案:

对于j = 2到5的循环

第一次迭代:j设置为2,循环条件的计算结果为true。

第二次迭代:j递增到3,循环条件的计算结果为真。

第3次迭代:j递增到4,循环条件的计算结果为真。

第4次迭代:j递增到5,循环条件的计算结果为true。

第5次迭代:j递增到6,循环条件计算为false,退出循环。

所以for语句执行了5次,尽管循环中的语句执行了4次。