Professional Documents
Culture Documents
M. Tech.(Software Eng.),
BITS-WIPRO Collaborative Program
Yogeshri Gaidhani
Instructor: Yogeshri Gaidhani
yogeshrigaidhani@gmail.com
(M) 9422774507
Textbooks
General techniques
Dynamic programming
Greedy Method
Linear programming
Randomization
Analysis methodology
Correctness
Complexity
Limitations of computation
What we want to do…
Understanding term Algorithm
6, 2, 9, 12, 11, 9, 3, 7
Now the next pair of numbers are compared. Again the 9 is the
larger and so this pair is also exchanged.
6, 2, 9, 12, 11, 9, 3, 7
In the third comparison, the 9 is not larger than the 12 so no
exchange is made. We move on to compare the next pair without
any change to the list.
6, 2, 9, 11, 12, 9, 3, 7
The 12 is larger than the 11 so they are exchanged.
6, 2, 9, 11, 9, 12, 3, 7
The twelve is greater than the 9 so they are exchanged
The end of the list has been reached so this is the end of the first pass. The
6, 2, 9, 11, 9, 3, 12, 7
twelve at the end of the list must be largest number in the list and so is now in
The 12
the correct is greater
position. Wethan
now the 3 so
start theypass
a new are exchanged.
from left to right.
6, 2, 9, 11, 9, 3, 7, 12
The 12 is greater than the 7 so they are exchanged.
Bubble Sort Example
First Pass
6, 2, 9, 11, 9, 3, 7, 12
Second Pass
6, 6,
2, 2, 9, 9,
11,3,
11,
9,7,
11,
3,11,
7, 12
Notice that this time we do not have to compare the last two
numbers as we know the 12 is in position. This pass therefore only
requires 6 comparisons.
Bubble Sort Example
First Pass
6, 2, 9, 11, 9, 3, 7, 12
Second Pass
Third Pass
2, 6, 9, 9, 3, 7, 11, 12
2, 6, 9, 3,
9, 9,
7, 9,
3, 7, 11, 12
This time the 11 and 12 are in position. This pass therefore only
requires 5 comparisons.
Bubble Sort Example
First Pass
6, 2, 9, 11, 9, 3, 7, 12
Second Pass
Third Pass
2, 6, 9, 9, 3, 7, 11, 12
Fourth Pass
2, 6, 9, 3, 7, 9, 11, 12
2, 6, 3,
9, 9,
7, 9,
3, 7, 9, 11, 12
Each pass requires fewer comparisons. This time only 4 are needed.
Bubble Sort Example
First Pass
6, 2, 9, 11, 9, 3, 7, 12
Second Pass
Third Pass
2, 6, 9, 9, 3, 7, 11, 12
Fourth Pass
2, 6, 9, 3, 7, 9, 11, 12
Fifth Pass
2, 6, 3, 7, 9, 9, 11, 12
2, 6,
3, 3,
6, 7, 9, 9, 11, 12
The list is now sorted but the algorithm does not know this until it
completes a pass with no exchanges.
Bubble Sort Example
First Pass
6, 2, 9, 11, 9, 3, 7, 12
Second Pass
Third Pass
2, 6, 9, 9, 3, 7, 11, 12
Fourth Pass
2, 6, 9, 3, 7, 9, 11, 12
2, 6, 3, 7, 9, 9, 11, 12
Fifth PassThis pass no exchanges are made so the algorithm knows the list is
sorted. It can therefore save time by not doing the final pass. With
Sixth Pass
2, 3, 6, 7, 9, 9,
other lists this check could save much more work.
11, 12
2, 3, 6, 7, 9, 9, 11, 12
Bubble Sort Questions Time
1. Which number is definitely in its correct position at the end of
the first pass?
Answer: The last number must be the largest.
2. How does the number of comparisons required change as the
pass number increases?
Answer: Each pass requires one fewer comparison than the last.
3. How does the algorithm know when the list is sorted?
Write a function
bsort1(int A[], int n)
and apply the bubble sort algorithm to sort
elements in array A in ascending order.
You may test your function with the
following main program.
int main()
{
int a[] = { 1, 3, 5, 7, 2, 4, 6 };
int size = sizeof(a) / sizeof(a[0]);
bsort1(a, size); print_array(a, size);
return 0;
}
bsort2
Write a function
bsort2(int A[], int n)
and apply the bubble sort algorithm to
sort elements in array A in descending
order.
You may test your function with the following
main program.
int main()
{
int a[] = { 1, 3, 5, 7, 2, 4, 6 };
int size = sizeof(a) / sizeof(a[0]);
bsort1(a, size); print_array(a, size);
bsort2(a, size); print_array(a, size);
return 0;
}
bsort3
Write a function
bsort3(int A[], int n)
which will sort the array A so that even
numbers will be in front of odd numbers.
For example,
{ 1, 3, 5, 7, 2, 4, 6 } → {2, 4, 6, 1, 3, 5,
7}
{ 7, 3, 5, 1, 6, 4, 2} → {6, 4, 2, 7, 3, 5, 1 }
bsort4
Write a function
bsort4(int A[], int n)
which will sort the array A so that odd
numbers will be in front of even
numbers.
For example,
{2, 4, 6, 1, 3, 5, 7 } → { 1, 3, 5, 7, 2, 4,
6}
{6, 4, 2, 1, 3, 5, 7 } →{ 1, 3, 5, 7, 6, 4, 2}
bsort5
Write a function
bsort5(int A[], int n)
which will sort the array A so that even
numbers will be in front of odd numbers.
Moreover, the sequences of odd numbers
and even numbers are also independently
sorted in ascending order.
For example,
{ 1, 3, 5, 7, 6, 4, 2} → {2, 4, 6, 1, 3, 5, 7 }
Analysis
Simplifications
Ignore actual and abstract statement
costs
Order of growth is the interesting
measure:
Highest-order term is what counts
Remember, we are doing asymptotic analysis
As the input size grows larger it is the high
order term that dominates
Upper Bound Notation
We say BubbleSort’s run time is O(n2)
Properly we should say run time is in O(n2)
Read O as “Big-O” (you’ll also hear it as
“order”)
In general a function
f(n) is O(g(n)) if there exist positive constants
c and n0 such that f(n) c g(n) for all n n0
Formally
O(g(n)) = { f(n): positive constants c and n0
such that f(n) c g(n) n n0
Bubble Sort Is O(n2)
Proof
Suppose runtime is an2 + bn + c
If any of a, b, and c are less than 0 replace the
constant with its absolute value
an2 + bn + c (a + b + c)n2 + (a + b + c)n +
(a + b + c)
3(a + b + c)n2 for n 1
Let c’ = 3(a + b + c) and let n0 = 1
Question
Is BubbleSort O(n3)?
Is BubbleSort O(n)?
Big O Fact
A polynomial of degree k is O(nk)
Proof:
Suppose f(n) = bknk + bk-1nk-1 + … + b1n
+ b0
Let ai = | bi |
i k-1
f(n) akknk + ank-1n + …k + a1n + a0
n a i
n k
n a
i cn k
Lower Bound Notation
We say Bubble Sort’s run time is (n)
In general a function
f(n) is (g(n)) if positive constants c and
n0 such that 0 cg(n) f(n) n n0
Proof:
Suppose run time is an + b
Assume a and b are positive (what if b is
negative?)
an an + b
Asymptotic Tight Bound
A function f(n) is (g(n)) if positive
constants c1, c2, and n0 such that
Theorem
f(n) is (g(n)) iff f(n) is both O(g(n)) and
(g(n))
Proof: someday
Practical Complexity
250
f(n) = n
f(n) = log(n)
f(n) = n log(n)
f(n) = n^2
f(n) = n^3
f(n) = 2^n
0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Practical Complexity
500
f(n) = n
f(n) = log(n)
f(n) = n log(n)
f(n) = n^2
f(n) = n^3
f(n) = 2^n
0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Practical Complexity
1000
f(n) = n
f(n) = log(n)
f(n) = n log(n)
f(n) = n^2
f(n) = n^3
f(n) = 2^n
0
1 3 5 7 9 11 13 15 17 19
Practical Complexity
5000
4000
f(n) = n
f(n) = log(n)
3000
f(n) = n log(n)
f(n) = n^2
2000 f(n) = n^3
f(n) = 2^n
1000
0
1 3 5 7 9 11 13 15 17 19
Practical Complexity
10000000
1000000
100000
10000
1000
100
10
1
1 4 16 64 256 1024 4096 16384 65536
Why is it necessary for you to
study algorithms?