【发布时间】:2012-02-08 19:51:40
【问题描述】:
为明天的期中考试而学习,这些时间复杂性是我难以解决的问题。我将复习书中的简单示例以及此示例
交换排序
void exchangesort (int n, keytype S[])
{
index i, j;
for(i=1; i<=n-1; i++)
for(j=i+1; j<=n; j++)
if(S[j] < S[i])
exchange S[i] and S[j];
}
对于这种 Exchange 排序的“每个案例时间复杂性”,我理解我们非常分析 j for 循环的部分,因为它具有基本操作(交换)。因此,如果您列出通过的总数,则为:
T(n) = (n-1) + (n-2) + (n-3) + ... + 1 = (n-1)n/2
现在我的问题是...... 1 来自哪里?我还以为是n-1 + n-2 +... + n。
此外,我真正不明白的是如何提出(n-1)n/2。
这显然是我在中期必须提出的,通过观察,(n-1)n/2 并不直观......我明白如何提出T(n) = (n-1) + (n-2) 等,我想......
谁能用通俗的话给我解释一下,这样我明天的期中考试就可以想出这样的答案了吗?
【问题讨论】:
-
细节记不太清楚了。但请注意,在 最坏 的情况下,每个循环都会执行 n 次循环。所以,你有 2 个 nested 循环。这就是为什么你有(n)(n)。希望其他stackoverflowers能给你准确的答案。