Amortized Analysis of Algorithms

前端 未结 2 1843
隐瞒了意图╮
隐瞒了意图╮ 2020-12-09 06:55

I am currently reading amortized analysis. I am not able to fully understand how it is different from normal analysis we perform to calculate average or worst case behaviour

2条回答
  •  小蘑菇
    小蘑菇 (楼主)
    2020-12-09 07:50

    average - a probabilistic analysis, the average is in relation to all of the possible inputs, it is an estimate of the likely run time of the algorithm.

    amortized - non probabilistic analysis, calculated in relation to a batch of calls to the algorithm.

    example - dynamic sized stack:

    say we define a stack of some size, and whenever we use up the space, we allocate twice the old size, and copy the elements into the new location.

    overall our costs are:

    • O(1) per insertion \ deletion

    • O(n) per insertion ( allocation and copying ) when the stack is full

    so now we ask, how much time would n insertions take?

    one might say O(n^2), however we don't pay O(n) for every insertion. so we are being pessimistic, the correct answer is O(n) time for n insertions, lets see why:

    lets say we start with array size = 1.

    ignoring copying we would pay O(n) per n insertions.

    now, we do a full copy only when the stack has these number of elements:

    1,2,4,8,...,n/2,n

    for each of these sizes we do a copy and alloc, so to sum the cost we get:

    const*(1+2+4+8+...+n/4+n/2+n) = const*(n+n/2+n/4+...+8+4+2+1) <= const*n(1+1/2+1/4+1/8+...)

    where (1+1/2+1/4+1/8+...) = 2

    so we pay O(n) for all of the copying + O(n) for the actual n insertions

    O(n) worst case for n operation -> O(1) amortized per one operation.

提交回复
热议问题