patternMajor
Evaluating the average time complexity of a given bubblesort algorithm.
Viewed 0 times
theaveragetimealgorithmbubblesortgivencomplexityevaluating
Problem
Considering this pseudo-code of a bubblesort:
What would be the basic ideas I would have to keep in mind to evaluate the average time-complexity? I already accomplished calculating the worst and best cases, but I am stuck deliberating how to evaluate the average complexity of the inner loop, to form the equation.
The worst case equation is:
$$
\sum_{i=0}^n \left(\sum_{j=0}^{n -(i+1)}O(1) + O(1)\right) = O(\frac{n^2}{2} + \frac{n}{2}) = O(n^2)
$$
in which the inner sigma represents the inner loop, and the outer sigma represents the outer loop. I think that I need to change both sigmas due to the "if-then-break"-clause, which might affect the outer sigma but also due to the if-clause in the inner loop, which will affect the actions done during a loop (4 actions + 1 comparison if true, else just 1 comparison).
For clarification on the term average-time: This sorting algorithm will need different time on different lists (of the same length), as the algorithm might need more or less steps through/within the loops until the list is completely in order. I try to find a mathematical (non statistical way) of evaluating the average of those rounds needed.
For this I expect any order to be of the same possibility.
FOR i := 0 TO arraylength(list) STEP 1
switched := false
FOR j := 0 TO arraylength(list)-(i+1) STEP 1
IF list[j] > list[j + 1] THEN
switch(list,j,j+1)
switched := true
ENDIF
NEXT
IF switched = false THEN
break
ENDIF
NEXTWhat would be the basic ideas I would have to keep in mind to evaluate the average time-complexity? I already accomplished calculating the worst and best cases, but I am stuck deliberating how to evaluate the average complexity of the inner loop, to form the equation.
The worst case equation is:
$$
\sum_{i=0}^n \left(\sum_{j=0}^{n -(i+1)}O(1) + O(1)\right) = O(\frac{n^2}{2} + \frac{n}{2}) = O(n^2)
$$
in which the inner sigma represents the inner loop, and the outer sigma represents the outer loop. I think that I need to change both sigmas due to the "if-then-break"-clause, which might affect the outer sigma but also due to the if-clause in the inner loop, which will affect the actions done during a loop (4 actions + 1 comparison if true, else just 1 comparison).
For clarification on the term average-time: This sorting algorithm will need different time on different lists (of the same length), as the algorithm might need more or less steps through/within the loops until the list is completely in order. I try to find a mathematical (non statistical way) of evaluating the average of those rounds needed.
For this I expect any order to be of the same possibility.
Solution
Recall that a pair $(A[i], A[j])$ (resp. $(i,j)$) is inverted if $i A[j]$.
Assuming your algorithm performs one swap for each inversion, the running time of your algorithm will depend on the number of inversions.
Calculating the expected number of inversions in a uniform random permutation is easy:
Let $P$ be a permutation, and let $R(P)$ be the reverse of $P$. For example, if $P = 2,1,3,4$ then $R(P) = 4,3,1,2$.
For each pair of indices $(i,j)$ there is an inversion in exactly one of either $P$ or $R(P)$.
Since the total number of pairs is $n(n-1)/2$, and the total number and each pair is inverted in exactly half of the permutations, assuming all permutations are equally likely, the expected number of inversions is:
$$\frac{n(n-1)}{4}$$
Assuming your algorithm performs one swap for each inversion, the running time of your algorithm will depend on the number of inversions.
Calculating the expected number of inversions in a uniform random permutation is easy:
Let $P$ be a permutation, and let $R(P)$ be the reverse of $P$. For example, if $P = 2,1,3,4$ then $R(P) = 4,3,1,2$.
For each pair of indices $(i,j)$ there is an inversion in exactly one of either $P$ or $R(P)$.
Since the total number of pairs is $n(n-1)/2$, and the total number and each pair is inverted in exactly half of the permutations, assuming all permutations are equally likely, the expected number of inversions is:
$$\frac{n(n-1)}{4}$$
Context
StackExchange Computer Science Q#20, answer score: 20
Revisions (0)
No revisions yet.