-1
Я обнаружил, что временная сложность этого кода равна O (N). Это правильно?Какова временная сложность этих двух вложенных циклов?
for(i=n;i>=1;i--) {
for(j=n-i; j>=1; j--) {
x++;
}
}
Я обнаружил, что временная сложность этого кода равна O (N). Это правильно?Какова временная сложность этих двух вложенных циклов?
for(i=n;i>=1;i--) {
for(j=n-i; j>=1; j--) {
x++;
}
}
Да, это O (п).
Наружный цикл будет выполнен n
раз. Внутренний цикл, в среднем, будет выполнен n/2
раз. Умножьте сложность внутреннего контура и внешнего контура, чтобы получить O(n * n/2)
, который равен O (n).
как второй цикл будет выполняться n/2 раза? он будет выполняться n-1 раз. не так ли? если так, то объясните пожалуйста. – Avenger
В первый раз, когда вводится внешний цикл, 'i' равно' n', поэтому внутренний цикл вообще не выполняется. В следующий раз 'i' равен' n-1', поэтому 'x ++' выполняется 1 раз. Затем 2 раза, 3, 4 и так далее до 'i = 1', затем выполняется' n-1' раз. Среднее число чисел 1, 2 ..., n-1 имеет порядок O (n/2). – kfx
Еще один способ взглянуть в том, что суммирование 1, 2, ... n - 1 имеет n квадратичный член, поэтому порядок равен O (n^2) –