Прежде всего, (n-1)!
означает (n-1)(n-2)...(2)(1)
. Это явно не то, что вы хотите здесь.
Если вы посчитаете фактическое количество итераций, то это будет 0 + 1 + 2 + ... + (n-2) + (n-1)
. Обратите внимание, что в сумме есть n
слагаемых, и мы можем объединить их таким образом, чтобы среднее значение каждой пары было (n-1)/2
. (Соедините самый высокий и самый низкий, второй самый высокий и второй самый низкий и т. Д.) Если n
нечетно, у вас будет один оставшийся, который не может быть спарен, но для удобства его значение также равно (n-1)/2
. Таким образом, у вас есть n
терминов, а среднее значение для всех терминов составляет (n-1)/2
, поэтому общая сумма составляет n(n-1)/2
.
Теперь для больших O-нотаций не имеет значения, сколько именно у нас итераций - мы просто хотим знать предел, когда n
очень велик. Обратите внимание, что наше число итераций может быть записано как (1/2)n^2 - (1/2)n
. Для очень большого n
термин n^2
намного больше, чем термин n
, поэтому мы отбрасываем термин n
. Это просто оставляет нас с (1/2)n^2
, но другое правило больших O-обозначений - мы не заботимся о постоянном множителе, поэтому мы просто пишем, что это O (n ^ 2).