Временная сложность вращающейся матрицы 90 градусов - PullRequest
0 голосов
/ 20 марта 2020

В моем учебнике сложность времени O (n ^ 2). Не будет ли это на самом деле быстрее, чем n ^ 2, поскольку первый l oop имеет границу n / 2, а второй l oop - границу n-1-слоя; так что для обоих циклов это не бьет по всем п?

for (int layer = 0; layer < n / 2; layer++) {
    int first = layer;
    int last = n - 1 - layer;
    for(int i = first; i < last; i++) {
        int offset = i - first;
        int top = matrix[first][i]; // save top

        // left -> top
        matrix[first][i] = matrix[last-offset][first];          

        // bottom -> left
        matrix[last-offset][first] = matrix[last][last - offset]; 

        // right -> bottom
        matrix[last][last - offset] = matrix[i][last]; 

        // top -> right
        matrix[i][last] = top; // right <- saved top
    }
}

1 Ответ

0 голосов
/ 24 марта 2020

Временная сложность вышеуказанного кода:

// Constant divisors or multipliers does not have any effect on time complexity
O((n/2)*(n/2)) ==> O((n^2)/4) ==> O(n^2)
...