# Algorithm Design 3. We have seen two different approaches to computing the number of combinations of m out of n items C(n,m) or n choose m. Divide-and-Conquer.

## Presentation on theme: "Algorithm Design 3. We have seen two different approaches to computing the number of combinations of m out of n items C(n,m) or n choose m. Divide-and-Conquer."— Presentation transcript:

Algorithm Design 3

We have seen two different approaches to computing the number of combinations of m out of n items C(n,m) or n choose m. Divide-and-Conquer is clearly inferior to Dynamic Programming since the latter requires the computation of each sub-instance only once. Is there a better approach? In terms of computational load In terms of range of values For example what is the value of C(100,000, 99,998) and can this value be computed using either method described? (D&C or DynPro). If yes, what is the order of complexity? If asked to compute this value by hand, how would you proceed? Introduction

Developing a Better Algorithm You have seen two methods for computing binomial coefficients based on a recurrence relation. Using the closed form expression for binomial coefficients provided in the textbook create another version of this function that has a lower order of complexity than either bin or bin2. Develop, implement and test your version of this function and then derive its order of complexty. Hint: simplify the factorial terms algebraically and capture their essential computations in a single loop.

Another Binary Coefficient Function function bin3(n,k:integer)return long_float is val : long_float:=1.0; numdone: boolean:=false; dendone: boolean:=false; numval : integer; denval : integer; numend : integer; begin numval:=n; if (n-k)>k then numend:=n-k+1; denval:=k; else numend:=k+1; denval:=n-k; end if; if n>k and k>0 then while not(numdone and dendone) loop if (val<1.0 and not(numdone)) or dendone then val:=val*long_float(numval); numval:=numval-1; numdone:=(numval { "@context": "http://schema.org", "@type": "ImageObject", "contentUrl": "http://images.slideplayer.com/14/4258575/slides/slide_4.jpg", "name": "Another Binary Coefficient Function function bin3(n,k:integer)return long_float is val : long_float:=1.0; numdone: boolean:=false; dendone: boolean:=false; numval : integer; denval : integer; numend : integer; begin numval:=n; if (n-k)>k then numend:=n-k+1; denval:=k; else numend:=k+1; denval:=n-k; end if; if n>k and k>0 then while not(numdone and dendone) loop if (val<1.0 and not(numdone)) or dendone then val:=val*long_float(numval); numval:=numval-1; numdone:=(numval

Summary Divide-and-Conquer method of computing combinations is impractical. Dynamic Programming is also limited. Sometimes the direct calculation or brute-force approach is preferred. The range of values in the direct calculation method is limited only by the size of the answer.

Download ppt "Algorithm Design 3. We have seen two different approaches to computing the number of combinations of m out of n items C(n,m) or n choose m. Divide-and-Conquer."

Similar presentations