Сложность f1
в O (n ^ 5), поскольку
for(i=0; i<N; i++) //i has a upper bound of n
for(j=0; j<i*i; j++) //j has a upper bound of i^2, which itself has the upper bound of n, so this is n^2
for(k=0; k<j; k++) //k has a upper bound of j, which is n^2
Sum++; //constant
Таким образом, полная верхняя граница равна n * n ^ 2 * n ^ 2, что равно n ^ 5, поэтому f1
находится в O (n ^ 5).
for (i = 0; i < 10; i++) //upper bound of 10 so in O(10) which is in O(1)
for (j = 0; j < i; j++) //upper bound of i so also O(1)
Sum += j * N; //N is just a integer here, and multiplication is a constant operation independent of the size of N, so also O(1)
Так что f2
находится в O (1 * 1 * 1), что является просто O (1).Обратите внимание, что все присваивания и объявления также являются постоянными.
Кстати, поскольку Sum++
не имеет побочных эффектов и с соответствующими циклами разрабатывает серию, для которой мы знаем решение (математика, программист или оптимальный оптимизатор компилятора, которое может уменьшитьf1
для постоянной программы, использующей формулу суммы гауссовских чисел (n*n+n) / 2
, поэтому сумма может быть просто вычислена как-то вроде (N*N + N ) / 2 * (N*N*N*N + N*N) / 2) * 2
, однако моя формула не учитывает начало с 0.