Simple “maximum value in array” and complexity calculations

前端 未结 4 1086
眼角桃花
眼角桃花 2021-02-20 07:15

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

4条回答
  •  难免孤独
    2021-02-20 07:59

    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:

    1. [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
      The above formula yields an ugly formula which is O(n)
    2. The last element is going to be checked if the first n-1 elements did not contain the value 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.

提交回复
热议问题