Вы начинаете с самого начала: сначала вам нужно рассчитать время, необходимое для запуска среднего случая MMultiply:
Первое, что вы можете увидеть в MMultiply, это цикл от 0 до n - 1, который дает вам:
T (MMultiply) = n * (T (what_is_inside_the_first_loop))
Теперь вам нужен T (what_is_inside_the_first_loop). Поскольку у вас есть только другой цикл внутри первого цикла, T (what_is_inside_the_first_loop) = n * T (what_is_inside_the_second_loop)
Внутри второго цикла находится только один вызов «DotProduct», поэтому, игнорируя назначение «=», T (what_is_inside_the_second_loop) = T (DotProduct).
Чтобы вычислить T (DotProduct), вы берете функцию построчно:
- 1 для начального назначения
- n для цикла
- 3 для каждой итерации цикла (1 для операции «+ =» и 1 для каждого вызова I, который выполняет только одну операцию)
т. Д. (DotProduct) = 1 + n * 3
замена T (DotProduct) в начальном ecuation дает вам:
T (MMultiply) = n * n * (1 + n * 3) = 3 * n ^ 3 + n ^ 2
так
T (MMultiply) = 3 * n ^ 3 + n ^ 2
нотация большого О в основном просто назначает это время определенному классу (это приближение). Класс, который лучше всего соответствует «3 * n ^ 3 + n ^ 2», равен n ^ 3 (поскольку n ^ 3 является наиболее значимым членом). Так что T (MMultiply) = O (n ^ 3).
Ваши вычисления были почти правильными, но у вас было положительное сальдо "+ 1" в первых двух строках MMultiply и, если вы прокомментировали для каждой строки время, необходимое для обработки этой строки, "t + = A [I ( i, k, n)] * B [I (k, j, n)]; "не принимает n, требуется только 2. То же самое касается" return t ", требуется только 1.