I\'m pretty new to this stuff and I need your help.
I should build an efficient simple algorithm which returns the maximum value in an array with size of n which contain
Best case - finding the max element as the first (O(1)
), worst case - it is the last element checked (O(n)
).
The tricky part is the average case.
To find the average case - we need the expected number of iterations!
Since you can stop after you find the maximum, we can split the problem into two parts:
[0,n-1)
: Since on average (assuming uniform independent distribution for each element) - the number n
has probability 1/n to be in each place, then the expected number of iterations for this part is 1/n + 2*((n-1)/n)/n + 3 * ((n-1)/n)^2/n + ... + (n-1) * ((n-1)/n)^(n-2)/n
1
n
: so you need to add to the above n* ((n-1)/n)^(n-1)
, which is O(n)
as well (lim to infinity is 1/e * n
).This totals in O(n)
average time solution.
(1): The formula for each element is j*((n-1)/n)^(j-1) * (1/n)
because:
j
- for the number of elements checked (number of iterations)((n-1)/n)^(j-1)
- Probability that there is no n
in the previous elements(1/n)
- Probability this number is n
.