Сложность алгоритма определяется путем подсчета количества операций, которые он выполняет при выполнении. Для al oop, который повторяется k
раз, где m
означает среднее количество операций на каждой итерации, общее количество выполненных операций составляет всегда total = k * m
, просто потому, что среднее значение определено как m = total / k
.
. Это также имеет смысл делать это в большой записи O: если al oop повторяет O(k)
раз и выполняет среднее из O(m)
операций на каждой итерации общее число операций составляет O(k * m)
.
Проблема в том, что во втором примере вы неправильно вычисляете среднее значение. Когда вы говорите «Внутренний l oop есть O (n ^ 2)» , , это уже среднее значение ; Вы рассматриваете количество итераций внутренней l oop для одной итерации внешней l oop. Общее число итераций равно O(n^3)
, а число внешних итераций l oop равно n
, поэтому среднее значение равно O(n^3 / n) = O(n^2)
, как и ожидалось.
Более естественно сделать это вычисление наоборот: после наблюдения, что среднее значение равно O(n^2)
, а внешнее значение l oop повторяется O(n)
раз, итоговое значение составляет O(n^2 * n) = O(n^3)
.