Algorithm
arrayMax(A, n) Input: array A of n integers Output: maximum element of A currentMax <- A[0] for i <- 1 to n−1 do if A[i] > currentMax then currentMax <- A[i] return currentMax |
Algorithm arrayMax(A, n) | Number of
operations |
currentMax <- A[0] | 2 |
for i <- 1 to n−1 do | 2 + n |
if A[i] > currentMax then | 2(n − 1) |
currentMax <- A[i] | 2(n − 1) |
{ increment counter i} | 2(n −1) |
return currentMax |
1 |
|
Total 7n − 1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
nk |
1 |
2k |
10k | 100k | 1000k |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Algorithm
prefixAverages1(X, n) Input array X of n integers Output array A of prefix averages of X A <- new array of n integers for i <- 0 to n−1 do s <- X[0] for j <- 1 to i do s <- s+X[j] A[i] <- s/(i+1) return A |
#operations n n n 1 + 2 + …+(n−1) 1 + 2 + …+(n−1) n 1 |
The following algorithm computes prefix averages
in linear time by keeping a running sum.
Algorithm
prefixAverages2(X, n) Input array X of n integers Output array A of prefix averages of X A <- new array of n integers s <- 0 for i <- 0 to n−1 do s <- s + X[i] A[i] <- s/(i + 1) return A |
#operations n 1 n n n 1 |
Algorithm prefixAverages2 runs in O(n) time.