Предположение 1: если процедура P запускается не более T раз, и каждый раз P выполняется за O(f(N)), то общее время выполнения равно O(T*f(N))
Предположение 2: если процедура P выполняется за время O(f(N)) и процедура Q выполняется за время O(g(N)), то выполнение P с последующим Q требует O(f(N)) f(N) + g(N)) время.
Чтобы быть педантичным, предположение 1 следует из предположения 2, если хотите.
Предположение 3. Присваивания и арифметические операции — это O(1) операций.
Объедините эти три предположения, и вы получите результат.
Строки 6 и 7 выполняются за время O(1) и O(1) соответственно, поэтому вместе они выполняются за время O(1 + 1) = O(1). (По предположению 3 и 2)
Строка 5 определяет, что {6,7} будет выполняться не более чем A.Length - 0 раз, поэтому время выполнения {5,6,7} равно O(A.Length * 1) = O(A.Length) (By Предположение 1)
Строки 2, 4 и 8 выполняются за время O(1), поэтому {2,4,5,6,7,8} выполняется за время O(1 + 1 + A.Length + 1) = O(A.Length) время. (По предположению 3 и 2 снова)
Строка 1 определяет, что {2..8} будет выполняться не более A.Length раз, поэтому время выполнения для строк {1..8} равно O(A.Length * A.Length) = O(A.Length ^2 ) (по предположению 1).
person
DanielV
schedule
24.09.2013