这是关于“算法导论”一书中对插入排序的分析。它表示跟随for循环执行n(= A.length)次:
for j = 2 to A.length
....
有谁能告诉我为什么这个循环执行n次而不是n-1次?
谢谢, 内甚
答案 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)
,其中c
和k
是常数。
答案 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次。