Daa Module 1
Daa Module 1
Daa Module 1
General method:
• These sub problems must be solved, and then a method must be found to combine
sub solutions into a solution of the whole.
• If the sub problems are still relatively large, then the divide-and-conquer strategy
can possibly be reapplied.
• Often the sub problems resulting from a divide-and-conquer design are of the same
type as the original problem.
• For those cases the re application of the divide-and-conquer principle is naturally
expressed by a recursive algorithm.
• D And C(Algorithm) is initially invoked as D and C(P), where ‘p’ is the problem to
VTUPulse.com
•
•
•
be solved.
Small(P) is a Boolean-valued function that determines whether the i/p size is small
enough that the answer can be computed without splitting.
If this so, the function ‘S’ is invoked.
Otherwise, the problem P is divided into smaller sub problems.
• These sub problems P1, P2 …Pk are solved by recursive application of D And C.
• Combine is a function that determines the solution to p using the solutions to the ‘k’
sub problems.
• If the size of ‘p’ is n and the sizes of the ‘k’ sub problems are n1, n2 ….nk,
respectively, then the computing time of D And C is described by the recurrence
relation.
T(n1)+T(n2)+……………+T(nk)+f(n); otherwise.
1
Page
2019-20
`
Module-2 Design and Analysis of Algorithm
• One of the methods for solving any such recurrence relation is called the
substitution method.
• This method repeatedly makes substitution for each occurrence of the function. T
is the Right-hand side until all such occurrences disappear.
Example:
1) Consider the case in which a=2 and b=2. Let T(1)=2 & f(n)=n.
We have,
T(n) = 2T(n/2)+n
= 2[2T(n/2/2)+n/2]+n
2
= [4T(n/4)+n]+n
Page
2019-20
`
Module-2 Design and Analysis of Algorithm
VTUPulse.com
Thus, T(n) = 2^log n T(n/2^log n) + n log n
= n. T(n/n) + n log n
BINARY SEARCH
5. {
2019-20
`
Module-2 Design and Analysis of Algorithm
• Algorithm, describes this binary search method, where Binsrch has 4I/ps a[], I , l &
x.
• It is initially invoked as Binsrch (a,1,n,x) • A non-recursive version of Binsrch is
given below.
• This Binsearch has 3 i/ps a,n, & x.
VTUPulse.com
•
•
The while loop continues processing as long as there are more elements left to
check.
At the conclusion of the procedure 0 is returned if x is not present, or ‘j’ is returned,
such that a[j]=x.
• We observe that low & high are integer Variables such that each time through the
loop either x is found or low is increased by at least one or high is decreased at least
one.
Thus we have 2 sequences of integers approaching each other and eventually low becomes
> than high & causes termination in a finite no. of steps if ‘x’ is not present.
Example:
-15,-6,0,7,9,23,54,82,101,112,125,131,142,151.
Place them in a[1:14], and simulate the steps Binsearch goes through as it searches for
different values of ‘x’.
4
Page
Only the variables, low, high & mid need to be traced as we simulate the algorithm.
2019-20
`
Module-2 Design and Analysis of Algorithm
VTUPulse.com
2 1 Not found
Proof:
We assume that all statements work as expected and that comparisons such as x>a[mid]
are appropriately carried out.
2019-20
`
Module-2 Design and Analysis of Algorithm
• Otherwise we observe that each time thro’ the loop the possible elements to be checked
of or equality with x and a[low], a[low+1],……..,a[mid],……a[high].
• If x=a[mid], then the algorithm terminates successfully.
• Otherwise, the range is narrowed by either increasing low to (mid+1) or decreasing
high to (mid-1).
• Clearly, this narrowing of the range does not affect the outcome of the search.
• If low becomes > than high, then ‘x’ is not present & hence the loop is exited.
• More importantly, when the elements in a[1:n] are polynomials, vectors, very large
numbers, or strings of character, the cost of an element comparison is much higher than
the cost of the other operations.
VTUPulse.com
•
1.
2.
Hence, the time is determined mainly by the total cost of the element comparison.
10. }
6
2019-20
`
Module-2 Design and Analysis of Algorithm
Now the best case occurs when the elements are in increasing order.
• On the average a[I] is > than max half the time, and so, the avg. no. of comparison
is 3n/2-1.
• A divide- and conquer algorithm for this problem would proceed as follows:
VTUPulse.com
Let P=(n, a[I] ,……,a[j]) denote an arbitrary instance of the problem.
Here ‘n’ is the no. of elements in the list (a[I],….,a[j]) and we are interested in
• If the list has more than 2 elements, P has to be divided into smaller instances.
• After having divided ‘P’ into 2 smaller sub problems, we can solve them by
recursively invoking the same divide-and-conquer algorithm.
7
Page
2019-20
`
Module-2 Design and Analysis of Algorithm
VTUPulse.com
14. } else
15. {
16. max:=a[I];
17. min:=a[j];
18. }
19. }
20. else
21. {
22. // if P is not small, divide P into subproblems.
23. // find where to split the set mid:=[(I+j)/2];
24. //solve the subproblems
25. MaxMin(I,mid,max.min);
26. MaxMin(mid+1,j,max1,min1);
8
2019-20
`
Module-2 Design and Analysis of Algorithm
• A good way of keeping track of recursive calls is to build a tree by adding a node
each time a new call is made.
• For this Algorithm, each node has 4 items of information: I, j, max & imin.
• Examining fig: we see that the root node contains 1 & 9 as the values of I &j
corresponding to the initial call to MaxMin.
VTUPulse.com
• This execution produces 2 new calls to MaxMin, where I & j have the values 1, 5
& 6, 9 respectively & thus split the set into 2 subsets of approximately the same
size.
• From the tree, we can immediately see the maximum depth of recursion is 4.
(including the 1st call)
• The include no.s in the upper left corner of each node represent the order in which
max & min are assigned values.
n=2
0 n=1
9
Page
2019-20
`
Module-2 Design and Analysis of Algorithm
= 2^k-1T(2)+
= 2^k-1+2^k-2
= 2^k/2+2^k-2
= n/2+n-2
= (n+2n)/2)-2
T(n)=(3n/2)-2
*Note that (3n/3)-3 is the best-average, and worst-case no. of comparisons when ‘n’ is
a power of 2.
VTUPulse.com
MERGE SORT
2019-20
`
Module-2 Design and Analysis of Algorithm
1. Algorithm MergeSort(low,high)
2. //a[low:high] is a global array to be sorted
3. //Small(P) is true if there is only one element 4. //to sort. In this case the list is
already sorted.
5. {
6. if (low<high) then //if there are more than one element
7. {
8. //Divide P into subproblems
9. //find where to split the set
10. mid = [(low+high)/2]; 11. //solve the subproblems.
12. mergesort (low,mid);
13. mergesort(mid+1,high);
VTUPulse.com
14. //combine the solutions .
15. merge(low,mid,high);
16. }
17. }
1. Algorithm merge(low,mid,high)
2. //a[low:high] is a global array containing
3. //two sorted subsets in a[low:mid]
4. //and in a[mid+1:high].The goal is to merge these 2 sets into
5. //a single set residing in a[low:high].b[] is an auxiliary global array.
6. {
11
2019-20
`
Module-2 Design and Analysis of Algorithm
VTUPulse.com
24.
25.
26.
{
b[I]=a[k];
I=I+1;
27. }
28. else
29. for k=h to mid do
30. {
31. b[I]=a[k];
32. I=I+1;
33. }
34. for k=low to high do a[k] = b[k];
35. }
12
• Consider the array of 10 elements a[1:10] =(310, 285, 179, 652, 351, 423, 861, 254,
Page
450, 520)
2019-20
`
Module-2 Design and Analysis of Algorithm
• Algorithm Mergesort begins by splitting a[] into 2 sub arrays each of size five
(a[1:5] and a[6:10]).
• The elements in a[1:5] are then split into 2 sub arrays of size 3 (a[1:3] ) and 2(a[4:5])
• Then the items in a a[1:3] are split into sub arrays of size 2 a[1:2] & one(a[3:3])
• The 2 values in a[1:2} are split to find time into one-element sub arrays, and now
the merging begins.
(310| 285| 179| 652, 351| 423, 861, 254, 450, 520)
VTUPulse.com
Then a[3] is merged with a[1:2] and
(179, 285, 310| 652, 351| 423, 861, 254, 450, 520)
(179, 285, 310| 351, 652 | 423, 861, 254, 450, 520)
(179, 285, 310, 351, 652| 423, 861, 254, 450, 520)
Repeated recursive calls are invoked producing the following sub arrays. (179,
285, 310, 351, 652| 423| 861| 254| 450, 520)
13
2019-20
`
Module-2 Design and Analysis of Algorithm
Next a[9] &a[10] are merged, and then a[6:8] & a[9:10]
(179, 285, 310, 351, 652| 254, 423, 450, 520, 861 )
At this point there are 2 sorted sub arrays & the final merge produces the fully sorted
result.
(179, 254, 285, 310, 351, 423, 450, 520, 652, 861)
• If the time for the merging operations is proportional to ‘n’, then the computing time
for merge sort is described by the recurrence relation.
T(n) = { a
n=1,’a’ a constant
VTUPulse.com
2T(n/2)+cn
n>1,’c’ a constant.
14
Page
2019-20
`
Module-2 Design and Analysis of Algorithm
When ‘n’ is a power of 2, n= 2^k, we can solve this equation by successive substitution.
= 4T(n/4)+2cn
= 4(2T(n/8)+cn/4)+2cn
*
= 2^k T(1)+kCn.
= an + cn log n.
T(n)=O(n log n)
VTUPulse.com
QUICK SORT
• In merge sort, the file a[1:n] was divided at its midpoint into sub arrays which were
independently sorted & later merged.
• In Quick sort, the division into 2 sub arrays is made so that the sorted sub arrays do
not need to be merged later.
• This is accomplished by rearranging the elements in a[1:n] such that a[I]<=a[j] for
all I between 1 & n and all j between (m+1) & n for some m, 1<=m<=n.
2019-20
`
Module-2 Design and Analysis of Algorithm
• It is assumed that a[p]>=a[m] and that a[m] is the partitioning element. If m=1 &
p-1=n, then a[n+1] must be defined and must be greater than or equal to all elements
in a[1:n]
• The assumption that a[m] is the partition element is merely for convenience, other
choices for the partitioning element than the first item in the set are better in practice.
1. Algorithm Partition(a,m,p)
2. //within a[m],a[m+1],…..,a[p-1] the elements
3. // are rearranged in such a manner that if
4. //initially t=a[m],then after completion
VTUPulse.com
5. //a[q]=t for some q between m and
6. //p-1,a[k]<=t for m<=k<q, and 7. //a[k]>=t for q<k<p. q is returned
8. //Set a[p]=infinite.
9. {
10. v=a[m];I=m;j=p;
11. repeat
12. {
13. repeat
14. I=I+1;
15. until(a[I]>=v);
16. repeat
17. j=j-1;
16
18. until(a[j]<=v);
Page
2019-20
`
Module-2 Design and Analysis of Algorithm
1. Algorithm Interchange(a,I,j)
2. //Exchange a[I] with a[j]
3. {
4. p=a[I];
5. a[I]=a[j];
6. a[j]=p;
7. }
VTUPulse.com
1. Algorithm Quicksort(p,q)
2. //Sort the elements a[p],….a[q] which resides
3. //is the global array a[1:n] into ascending
4. //order; a[n+1] is considered to be defined
5. // and must be >= all the elements in a[1:n]
6. {
7. if(p<q) then // If there are more than one element
8. {
9. // divide p into 2 subproblems
10. j=partition(a,p,q+1);
11. //’j’ is the position of the partitioning element.
12. //solve the subproblems.
13. quicksort(p,j-1);
17
14. quicksort(j+1,q);
Page
2019-20
`
Module-2 Design and Analysis of Algorithm
• Let A and B be the 2 n*n Matrix. The product matrix C=AB is calculated by using
the formula,
• Divide and conquer method suggest another way to compute the product of n*n
matrix.
• We assume that N is a power of 2 .In the case N is not a power of 2 ,then enough
VTUPulse.com
rows and columns of zero can be added to both A and B .SO that the resulting
dimension are the powers of two.
• If n=2 then the following formula as a computed using a matrix multiplication
operation for the elements of A & B.
• If n>2,Then the elements are partitioned into sub matrix n/2*n/2..since ‘n’ is a
power of 2 these product can be recursively computed using the same formula .This
Algorithm will continue applying itself to smaller sub matrix until
‘N” become suitable small(n=2) so that the product is computed directly .
2019-20
`
Module-2 Design and Analysis of Algorithm
VTUPulse.com
19
Page
2019-20
DIVIDE AND CONQUER
`
Module-2 Design and Analysis of Algorithm
Example
44 4 4
*
44 4 4
P=(4*4)+(4+4)=64
Q=(4+4)4=32
R=4(4-4)=0
VTUPulse.com
S=4(4-4)=0
T=(4+4)4=32
U=(4-4)(4+4)=0
V=(4-4)(4+4)=0
C11=(64+0-32+0)=32
C12=0+32=32
C21=32+0=32
C22=64+0-32+0=32
20
32 3
2019-20
DIVIDE AND CONQUER
`
Module-2 Design and Analysis of Algorithm
since n/2n/2 &matrix can be can be added in Cn for some constant C, The overall computing
time T(n) of the resulting divide and conquer algorithm is given by the sequence.
T(n)= b n<=2 a &b are
8T(n/2)+cn^2 n>2 constant
That is T(n)=O(n^3)
* Matrix multiplication are more expensive then the matrix addition O(n^3).We can
attempt to reformulate the equation for Cij so as to have fewer multiplication and possibly
more addition .
• Stressen has discovered a way to compute the Cij of equation (2) using only 7
multiplication and 18 addition or subtraction.
• Strassen’s formula are
P= (A11+A12)(B11+B22)
VTUPulse.com
Q= (A12+A22)B11
R= A11(B12-B22)
S= A22(B21-B11)
T= (A11+A12)B22
U= (A21-A11)(B11+B12)
V= (A12-A22)(B21+B22)
C11=P+S-T+V
C!2=R+t
C21=Q+T
C22=P+R-Q
21
Page
2019-20