Categroy:
1.Binary search
2.Powering a number
3.Fibonacci numbers
4.Matrix Multiplication
5.Starass's algorithem
1.Binary search
master thorem
T(n) = aT(n/b) +f(n)
CASE 1: f (n) = O(nlogba – ε), constant ε > 0
⇒ T(n) = Θ(nlogba) .
CASE 2: f (n) = Θ(nlogba lgkn), constant k ≥ 0
⇒ T(n) = Θ(nlogba lgk+1n) .
CASE 3: f (n) = Ω(nlogba + ε ), constant ε > 0,
and regularity condition
⇒ T(n) = Θ( f (n))
binary search:
T(n) = 1T(n/2)+Θ(1);
=>a=1,b=2; f(n ) = 1;
n^logba = n^0=1;
so:k=0;
thus:this means case 2 and T(n) = Θ(lgn);
code:
/*
* BaseSearchCustom.h
*
* Created on: 2013-12-17
* Author: deman
*/
#ifndef BASESEARCHCUSTOM_H_
#define BASESEARCHCUSTOM_H_
template <class T>
class BaseSearchCustom {
public:
BaseSearchCustom(){};
virtual ~BaseSearchCustom(){};
//we think A is a positive array,
int BinarySearch(T A[], T key, int n)
{
int little=0,large=0,mid=0;
if(A[0]>key || A[n-1]<key)
{
return -1;
}
if(A[0] == key)
{
return 1;
}
else if(A[n-1] == key)
{
return n;
}
large=n-1;
mid= (little+large)/2;
while(A[mid]!=key)
{
//check last case:A[k]<key<A[k+1]
if(((large-little)==1 && A[little]<key && A[large]>key)||(little == large))
{
//not find
mid = -1;
break;
}
if(A[mid]<key)
{
little = mid;
mid = (little+large)/2;
}
else
{
large = mid;
mid = (little+large)/2;
}
}
return (mid+1);
}
};
#endif /* BASESEARCHCUSTOM_H_ */