Завтра учусь в среднесрочной перспективе, и с этими сложностями во времени я борюсь.Я перебираю простые примеры в книге и для этого примера
Сортировка Exchange
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
, потому что он имеет базовую операцию (обмен).И поэтому, если вы укажете общее количество проходов, оно будет дано следующим образом:
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)
и т. д., я думаю ...
Может кто-нибудь объяснить мне это в непрофессионалахусловия, чтобы я мог придумать ответ, как этот для моего промежуточного завтра?