Asymptotic complexity 计算时间复杂度。。需要帮助才能得出最终结果吗

Asymptotic complexity 计算时间复杂度。。需要帮助才能得出最终结果吗,asymptotic-complexity,Asymptotic Complexity,为明天的期中考试而学习,而这些时间的复杂性正是我所面临的。我在复习书中的简单例子,对于这个例子 交换排序 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]; } 现在我的问题是。。。1是从哪里来的?我以为是n-1+

为明天的期中考试而学习,而这些时间的复杂性正是我所面临的。我在复习书中的简单例子,对于这个例子

交换排序

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];
}
现在我的问题是。。。1是从哪里来的?我以为是
n-1+n-2+…+n

此外,我真正不明白的是如何想出
(n-1)n/2

这显然是我在期中考试中必须想到的,通过观察这一点,
(n-1)n/2
并不能直观地得出。。。我知道如何想出
T(n)=(n-1)+(n-2)
等等,我想

有没有人能用外行的语言向我解释一下,这样我就可以在明天的期中考试中给出这样的答案?

好的,这样想:

When i = 1, inner loop runs (n - 1) times [j = 2 to n]
When i = 2, inner loop runs (n - 2) times [j = 3 to n]
When i = 3, inner loop runs (n - 3) times [j = 4 to n]
....
When i = k, inner loop runs (n - k) times [j = k + 1 to n]
...
When i = n - 1, inner loop runs (n - (n - 1)) = 1 time [j = n to n]
现在总结一下:

(n - 1) + (n - 2) + (n - 3) + ... + 1 = n(n - 1) / 2
在最坏的情况下,
交换将进行
n(n-1)/2次。

好的,这样想:

When i = 1, inner loop runs (n - 1) times [j = 2 to n]
When i = 2, inner loop runs (n - 2) times [j = 3 to n]
When i = 3, inner loop runs (n - 3) times [j = 4 to n]
....
When i = k, inner loop runs (n - k) times [j = k + 1 to n]
...
When i = n - 1, inner loop runs (n - (n - 1)) = 1 time [j = n to n]
现在总结一下:

(n - 1) + (n - 2) + (n - 3) + ... + 1 = n(n - 1) / 2

在最坏的情况下,
交换将执行
n(n-1)/2次。

在内部循环中,
j
i+1
运行到
n
,即通过
n-i
值。因此,总的来说,有

sum_{i = 1 to n-1} (n-i)
步骤,
(n-1)+(n-2)+…+(n-(n-1))=(n-1)+(n-2)+。1

现在,对于第一个
k
正整数的和,有一个闭合公式,它是

k*(k+1)/2
这里,
k=n-1

要计算第一个
k
正整数之和的公式,有几种很好的方法,如中所述。据说,Gauss在五岁时就用第一种方法解决了这个问题,老师让学生们计算从1到100的整数之和,希望能安静几分钟。最好看看是否这样安排:

  1   +   2   + ... + (n-1) +   n
  n   + (n-1) + ... +   2   +   1
----------------------------------
(n+1) + (n+1) + ... + (n+1) + (n+1) = n*(n+1)

在内部循环中,
j
i+1
运行到
n
,即通过
n-i
值运行。因此,总的来说,有

sum_{i = 1 to n-1} (n-i)
步骤,
(n-1)+(n-2)+…+(n-(n-1))=(n-1)+(n-2)+。1

现在,对于第一个
k
正整数的和,有一个闭合公式,它是

k*(k+1)/2
这里,
k=n-1

要计算第一个
k
正整数之和的公式,有几种很好的方法,如中所述。据说,Gauss在五岁时就用第一种方法解决了这个问题,老师让学生们计算从1到100的整数之和,希望能安静几分钟。最好看看是否这样安排:

  1   +   2   + ... + (n-1) +   n
  n   + (n-1) + ... +   2   +   1
----------------------------------
(n+1) + (n+1) + ... + (n+1) + (n+1) = n*(n+1)
序列从(n-1)到(1)[(n-1),(n-2)…(n-(n-1))] 检查序列的和,了解它是如何推导出来的。这很容易理解。

这个系列从(n-1)到(1)[(n-1),(n-2)…(n-(n-1))]
检查序列的和,了解它是如何推导出来的。这很容易理解。

一种解决方法是:

总和=1+2+3+4+…+n

2*sum=1+2+3+4+…+n+1+2+3+4+…+n=1+(n)+2+(n-1)+3+(n-2)…+(n)+1

2*sum=1+n+1+n+1+n

2*sum=n(1+n)

总和=n*(n+1)/2

但更简单的方法是想象一个正方形或网格矩阵


当我向下移动到每一新行时,j穿过矩阵的对角线并增加一列(当我计算它的一种方法是:

总和=1+2+3+4+…+n

2*sum=1+2+3+4+…+n+1+2+3+4+…+n=1+(n)+2+(n-1)+3+(n-2)…+(n)+1

2*sum=1+n+1+n+1+n

2*sum=n(1+n)

总和=n*(n+1)/2

但更简单的方法是想象一个正方形或网格矩阵


当我向下到每一新行时,j穿过矩阵的对角线,并在对角线上增加一列(因为我记不太清楚细节。但请注意,在最坏的情况下,每个循环将进行n次传递。因此,有2个嵌套循环。这就是为什么有(n)(n)。我希望其他stackoverflowers GV能为您提供准确的答案。我记不太清楚细节。但请注意,在最坏的情况下,每个循环将进行n次传递。因此,有2个嵌套循环。这就是为什么有(n)(n).我希望其他stackoverflowers能给你准确的答案。+1前k个整数的和解释得很好,但你会想记住它…啊,谢谢,现在我明白了1的来源。所以我想如果我理解正确,k*(k+1)/2只是一个我应该“刚刚知道”的常规算术公式…+1前k个整数的和解释得很好,但你要记住它…啊,谢谢,现在我明白了1的来源。所以我想如果我理解正确,k*(k+1)/2只是一个我应该“刚刚知道”的常规算术公式…而且,我不确定你是否需要自己提出这个公式…这是一个相当标准的公式。1+2+3+n之和出现在数学的许多领域。大多数人只是使用它,而没有每次证明它。谢谢罗伯特,对正方形/矩阵的解释让我很容易理解。我也不确定你是否需要提出这是一个相当标准的公式。1+2+3+…+n之和出现在数学的许多领域。大多数人只是使用它,而不是每次都证明它。谢谢罗伯特,对正方形/矩阵的解释使我很容易将链接的thx可视化,这使我意识到这只是一个我应该知道但可以理解的公式加油,因为这只适用于算术级数。在你的情况下,这将是最适用的,但只是一个警告。)thx的链接,这让我意识到这只是一个公式,我应该知道,但要小心,因为它只适用于算术级数。在你的情况下,这将是最适用的,但只是一个警告。)