Re: [algogeeks] Re: Need help on Divide and Conquer Algorithm

2011-05-21 Thread immanuel kingston
Solution:

int majorityElement(int a[], int n) {
if (a == null || a.length == 0 || n<=0) return -1;
int mElement = a[0];
int count=1;
for (int i=1; i < n; i++) {
if (a[i] == mElement) {
count++;
} else {
count--;
}
if (count <= 0) {
count = 1;
mElement = a[i];
}
}
count =0;
for (int i=0; i= n/2) ? mElement : -1;
}



On Thu, May 12, 2011 at 10:38 PM, pacific :-)  wrote:

> a sort and another traversal would also do the same job in o( nlogn + n )
> ??
>
>
> On Fri, Apr 15, 2011 at 12:49 AM, vishwakarma  > wrote:
>
>> complexity : O(n) + O(nlogn)
>>
>> Sweety wrote:
>> > Question :Let A[1..n] be an array of integers. Design an efficient
>> > divide and conquer algorithm to determine if A contains a majority
>> > element, i.e an element appears more than n/2 times in A. What is the
>> > time complexity of your algorithm?
>> >
>> > Answer:
>> > a[1..n] is an array
>> > int majorityElement(int a[], int first, int last)
>> > {
>> >  If (first = = last)
>> > {
>> >return a[first]; // Array has one element and its count =
>> 1
>> > and it is major element
>> >  }
>> > mid= (first+last)/2;
>> >
>> >(majorL,countL)= majorityElement(a,first,mid);
>> >(majorR,countR)= majorityElement(a,mid
>> > +1,last);
>> > n = total elements in an array;
>> >   If(majorL==majorR)
>> > return(countL+countR);
>> >  else
>> >  {
>> >If(countL>countR)
>> > return(majorL,countL);
>> >   elseif(countL< countR)
>> > return(majorR,countR);
>> >   else
>> >return(majorL,majorR);
>> >   }
>> >  if(countL>n/2)
>> > temp1=majorL;
>> >   if(countR>n/2)
>> >  temp2=majorR;
>> >
>> >If(temp1 = = temp2)
>> >   return temp1;
>> >   elseif(countL>countR)
>> >  return temp1;
>> >  else (countR>countL)
>> > return temp2;
>> > else
>> >   return -1;
>> > }
>> >
>> > int main()
>> > {
>> >   int a[8] = {2,3,2,2,4,2,2,2};
>> >   int first =1;
>> >   int last=8;   //change the value of last when the array
>> > increases or decreases in size
>> >   int x = majorityElement(a,first,last);
>> >   if(x= = -1)
>> > printf(“No Majority Element”)
>> >   else
>> >   Majority element = x;
>> >  }
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Algorithm Geeks" group.
>> To post to this group, send email to algogeeks@googlegroups.com.
>> To unsubscribe from this group, send email to
>> algogeeks+unsubscr...@googlegroups.com.
>> For more options, visit this group at
>> http://groups.google.com/group/algogeeks?hl=en.
>>
>>
>
>
> --
> regards,
> chinna.
>
>  --
> You received this message because you are subscribed to the Google Groups
> "Algorithm Geeks" group.
> To post to this group, send email to algogeeks@googlegroups.com.
> To unsubscribe from this group, send email to
> algogeeks+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/algogeeks?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algogeeks@googlegroups.com.
To unsubscribe from this group, send email to 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.



Re: [algogeeks] Re: Need help on Divide and Conquer Algorithm

2011-05-12 Thread pacific :-)
a sort and another traversal would also do the same job in o( nlogn + n )
??

On Fri, Apr 15, 2011 at 12:49 AM, vishwakarma
wrote:

> complexity : O(n) + O(nlogn)
>
> Sweety wrote:
> > Question :Let A[1..n] be an array of integers. Design an efficient
> > divide and conquer algorithm to determine if A contains a majority
> > element, i.e an element appears more than n/2 times in A. What is the
> > time complexity of your algorithm?
> >
> > Answer:
> > a[1..n] is an array
> > int majorityElement(int a[], int first, int last)
> > {
> >  If (first = = last)
> > {
> >return a[first]; // Array has one element and its count =
> 1
> > and it is major element
> >  }
> > mid= (first+last)/2;
> >
> >(majorL,countL)= majorityElement(a,first,mid);
> >(majorR,countR)= majorityElement(a,mid
> > +1,last);
> > n = total elements in an array;
> >   If(majorL==majorR)
> > return(countL+countR);
> >  else
> >  {
> >If(countL>countR)
> > return(majorL,countL);
> >   elseif(countL< countR)
> > return(majorR,countR);
> >   else
> >return(majorL,majorR);
> >   }
> >  if(countL>n/2)
> > temp1=majorL;
> >   if(countR>n/2)
> >  temp2=majorR;
> >
> >If(temp1 = = temp2)
> >   return temp1;
> >   elseif(countL>countR)
> >  return temp1;
> >  else (countR>countL)
> > return temp2;
> > else
> >   return -1;
> > }
> >
> > int main()
> > {
> >   int a[8] = {2,3,2,2,4,2,2,2};
> >   int first =1;
> >   int last=8;   //change the value of last when the array
> > increases or decreases in size
> >   int x = majorityElement(a,first,last);
> >   if(x= = -1)
> > printf(“No Majority Element”)
> >   else
> >   Majority element = x;
> >  }
>
> --
> You received this message because you are subscribed to the Google Groups
> "Algorithm Geeks" group.
> To post to this group, send email to algogeeks@googlegroups.com.
> To unsubscribe from this group, send email to
> algogeeks+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/algogeeks?hl=en.
>
>


-- 
regards,
chinna.

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algogeeks@googlegroups.com.
To unsubscribe from this group, send email to 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.



[algogeeks] Re: Need help on Divide and Conquer Algorithm

2011-04-14 Thread vishwakarma
example : let the array be { a,b,a,b,c,d,e,d,d,e,f};

now...
step 1 :pick any 2 different element and remove from the array till
array contains only same elements or any single element ...// dis
is implemented wid the above mentioned funtion " build() "

if there is any element whose occurence is greater than n/2 than u ll
always get an unique value left after step 1 , it wont depend on the
way u select 2 different element n removing them.



On Apr 15, 12:43 am, vishwakarma  wrote:
> Let A be the input array;
>
> Now algorithm is follows;
>
> struct leave{
>         int cand;
>         int count;};
>
> struct leave tree[120];
>
> void build(int s,int e,int node ,int *A)
> {
>         if(s == e){
>                 tree[node].cand = A[s];
>                 tree[node].count = 1;
>                 return;
>         }
>         else{
>                 int mid = (s+e)>>1;
>                 build(s,mid,2*node,A);
>                 build(mid+1,e,2*node+1,A);
>
>                 if(tree[2*node].cand == tree[2*node+1].cand){
>                         tree[node].cand = tree[2*node].cand;
>                         tree[node].count = tree[2*node].count + 
> tree[2*node+1].count;
>                 }
>                 else{
>                         if(tree[2*node].count > tree[2*node+1].count){
>                                 tree[node].cand = tree[2*node].cand;
>                                 tree[node].count = tree[2*node].count - 
> tree[2*node+1].count;
>                         }
>                         else{
>                                 tree[node].cand = tree[2*node+1].cand;
>                                 tree[node].count = tree[2*node+1].count - 
> tree[2*node].count;
>                         }
>                 }
>         }
>
> }
>
> int main()
> {
>  //read Array A
> build(1,n,1);
>
> //sort array A
>
> int val = Tree[1].cand;
>
> //perform binary search on sorted array A
> //if its count is strictly greater than n/2 then yes else no
> On Apr 15, 12:28 am, LALIT SHARMA  wrote:
>
> > Yes , I also need the same...Thanks for the help .
>
> > On Fri, Apr 15, 2011 at 12:52 AM, vishwakarma
> > wrote:
>
> > > I can post solution of this complexity if you want !!
>
> > > On Apr 15, 12:19 am, vishwakarma  wrote:
> > > > complexity : O(n) + O(nlogn)
>
> > > > Sweety wrote:
> > > > > Question :Let A[1..n] be an array of integers. Design an efficient
> > > > > divide and conquer algorithm to determine if A contains a majority
> > > > > element, i.e an element appears more than n/2 times in A. What is the
> > > > > time complexity of your algorithm?
>
> > > > > Answer:
> > > > > a[1..n] is an array
> > > > > int majorityElement(int a[], int first, int last)
> > > > > {
> > > > >          If (first = = last)
> > > > >         {
> > > > >         return a[first];     // Array has one element and its count = 
> > > > > 1
> > > > > and it is major element
> > > > >          }
> > > > >         mid= (first+last)/2;
>
> > > > >        (majorL,countL)= majorityElement(a,first,mid);
> > > > >        (majorR,countR)= majorityElement(a,mid
> > > > > +1,last);
> > > > >         n = total elements in an array;
> > > > >       If(majorL==majorR)
> > > > >         return(countL+countR);
> > > > >      else
> > > > >      {
> > > > >            If(countL>countR)
> > > > >                 return(majorL,countL);
> > > > >           elseif(countL< countR)
> > > > >                 return(majorR,countR);
> > > > >           else
> > > > >                return(majorL,majorR);
> > > > >       }
> > > > >          if(countL>n/2)
> > > > >             temp1=majorL;
> > > > >       if(countR>n/2)
> > > > >              temp2=majorR;
>
> > > > >    If(temp1 = = temp2)
> > > > >           return temp1;
> > > > >   elseif(countL>countR)
> > > > >          return temp1;
> > > > >  else (countR>countL)
> > > > >         return temp2;
> > > > > else
> > > > >       return -1;
> > > > > }
>
> > > > > int main()
> > > > > {
> > > > >       int a[8] = {2,3,2,2,4,2,2,2};
> > > > >       int first =1;
> > > > >       int last=8;   //change the value of last when the array
> > > > > increases or decreases in size
> > > > >       int x = majorityElement(a,first,last);
> > > > >       if(x= = -1)
> > > > >             printf(“No Majority Element”)
> > > > >       else
> > > > >           Majority element = x;
> > > > >  }
>
> > > --
> > > You received this message because you are subscribed to the Google 
> > > Groups> > "Algorithm Geeks" group.> To post to this group, send 
> > > emailtoalgoge...@googlegroups.com.> > To unsubscribe from this group, 
> > > send email to>algogeeks+unsubscr...@googlegroups.com.
> > > For more options, visit this group at
> > >http://groups.google.com/group/algogeeks?hl=en.
>
> > --
> > Lalit Kishore Sharma,
>
> > IIIT Allahabad (Amethi Capmus),
> > 6th Sem.

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algogee

[algogeeks] Re: Need help on Divide and Conquer Algorithm

2011-04-14 Thread vishwakarma
Let A be the input array;

Now algorithm is follows;

struct leave{
int cand;
int count;
};
struct leave tree[120];

void build(int s,int e,int node ,int *A)
{
if(s == e){
tree[node].cand = A[s];
tree[node].count = 1;
return;
}
else{
int mid = (s+e)>>1;
build(s,mid,2*node,A);
build(mid+1,e,2*node+1,A);

if(tree[2*node].cand == tree[2*node+1].cand){
tree[node].cand = tree[2*node].cand;
tree[node].count = tree[2*node].count + 
tree[2*node+1].count;
}
else{
if(tree[2*node].count > tree[2*node+1].count){
tree[node].cand = tree[2*node].cand;
tree[node].count = tree[2*node].count - 
tree[2*node+1].count;
}
else{
tree[node].cand = tree[2*node+1].cand;
tree[node].count = tree[2*node+1].count - 
tree[2*node].count;
}
}
}
}

int main()
{
 //read Array A
build(1,n,1);

//sort array A

int val = Tree[1].cand;

//perform binary search on sorted array A
//if its count is strictly greater than n/2 then yes else no
On Apr 15, 12:28 am, LALIT SHARMA  wrote:
> Yes , I also need the same...Thanks for the help .
>
> On Fri, Apr 15, 2011 at 12:52 AM, vishwakarma
> wrote:
>
>
>
> > I can post solution of this complexity if you want !!
>
> > On Apr 15, 12:19 am, vishwakarma  wrote:
> > > complexity : O(n) + O(nlogn)
>
> > > Sweety wrote:
> > > > Question :Let A[1..n] be an array of integers. Design an efficient
> > > > divide and conquer algorithm to determine if A contains a majority
> > > > element, i.e an element appears more than n/2 times in A. What is the
> > > > time complexity of your algorithm?
>
> > > > Answer:
> > > > a[1..n] is an array
> > > > int majorityElement(int a[], int first, int last)
> > > > {
> > > >          If (first = = last)
> > > >         {
> > > >         return a[first];     // Array has one element and its count = 1
> > > > and it is major element
> > > >          }
> > > >         mid= (first+last)/2;
>
> > > >        (majorL,countL)= majorityElement(a,first,mid);
> > > >        (majorR,countR)= majorityElement(a,mid
> > > > +1,last);
> > > >         n = total elements in an array;
> > > >       If(majorL==majorR)
> > > >         return(countL+countR);
> > > >      else
> > > >      {
> > > >            If(countL>countR)
> > > >                 return(majorL,countL);
> > > >           elseif(countL< countR)
> > > >                 return(majorR,countR);
> > > >           else
> > > >                return(majorL,majorR);
> > > >       }
> > > >          if(countL>n/2)
> > > >             temp1=majorL;
> > > >       if(countR>n/2)
> > > >              temp2=majorR;
>
> > > >    If(temp1 = = temp2)
> > > >           return temp1;
> > > >   elseif(countL>countR)
> > > >          return temp1;
> > > >  else (countR>countL)
> > > >         return temp2;
> > > > else
> > > >       return -1;
> > > > }
>
> > > > int main()
> > > > {
> > > >       int a[8] = {2,3,2,2,4,2,2,2};
> > > >       int first =1;
> > > >       int last=8;   //change the value of last when the array
> > > > increases or decreases in size
> > > >       int x = majorityElement(a,first,last);
> > > >       if(x= = -1)
> > > >             printf(“No Majority Element”)
> > > >       else
> > > >           Majority element = x;
> > > >  }
>
> > --
> > You received this message because you are subscribed to the Google Groups
> > "Algorithm Geeks" group.> To post to this group, send email 
> > toalgoge...@googlegroups.com.
> > To unsubscribe from this group, send email 
> > to>algogeeks+unsubscr...@googlegroups.com.
> > For more options, visit this group at
> >http://groups.google.com/group/algogeeks?hl=en.
>
> --
> Lalit Kishore Sharma,
>
> IIIT Allahabad (Amethi Capmus),
> 6th Sem.

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algogeeks@googlegroups.com.
To unsubscribe from this group, send email to 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.



Re: [algogeeks] Re: Need help on Divide and Conquer Algorithm

2011-04-14 Thread LALIT SHARMA
Yes , I also need the same...Thanks for the help .

On Fri, Apr 15, 2011 at 12:52 AM, vishwakarma
wrote:

> I can post solution of this complexity if you want !!
>
> On Apr 15, 12:19 am, vishwakarma  wrote:
> > complexity : O(n) + O(nlogn)
> >
> > Sweety wrote:
> > > Question :Let A[1..n] be an array of integers. Design an efficient
> > > divide and conquer algorithm to determine if A contains a majority
> > > element, i.e an element appears more than n/2 times in A. What is the
> > > time complexity of your algorithm?
> >
> > > Answer:
> > > a[1..n] is an array
> > > int majorityElement(int a[], int first, int last)
> > > {
> > >  If (first = = last)
> > > {
> > > return a[first]; // Array has one element and its count = 1
> > > and it is major element
> > >  }
> > > mid= (first+last)/2;
> >
> > >(majorL,countL)= majorityElement(a,first,mid);
> > >(majorR,countR)= majorityElement(a,mid
> > > +1,last);
> > > n = total elements in an array;
> > >   If(majorL==majorR)
> > > return(countL+countR);
> > >  else
> > >  {
> > >If(countL>countR)
> > > return(majorL,countL);
> > >   elseif(countL< countR)
> > > return(majorR,countR);
> > >   else
> > >return(majorL,majorR);
> > >   }
> > >  if(countL>n/2)
> > > temp1=majorL;
> > >   if(countR>n/2)
> > >  temp2=majorR;
> >
> > >If(temp1 = = temp2)
> > >   return temp1;
> > >   elseif(countL>countR)
> > >  return temp1;
> > >  else (countR>countL)
> > > return temp2;
> > > else
> > >   return -1;
> > > }
> >
> > > int main()
> > > {
> > >   int a[8] = {2,3,2,2,4,2,2,2};
> > >   int first =1;
> > >   int last=8;   //change the value of last when the array
> > > increases or decreases in size
> > >   int x = majorityElement(a,first,last);
> > >   if(x= = -1)
> > > printf(“No Majority Element”)
> > >   else
> > >   Majority element = x;
> > >  }
>
> --
> You received this message because you are subscribed to the Google Groups
> "Algorithm Geeks" group.
> To post to this group, send email to algogeeks@googlegroups.com.
> To unsubscribe from this group, send email to
> algogeeks+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/algogeeks?hl=en.
>
>


-- 
Lalit Kishore Sharma,

IIIT Allahabad (Amethi Capmus),
6th Sem.

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algogeeks@googlegroups.com.
To unsubscribe from this group, send email to 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.



[algogeeks] Re: Need help on Divide and Conquer Algorithm

2011-04-14 Thread vishwakarma
I can post solution of this complexity if you want !!

On Apr 15, 12:19 am, vishwakarma  wrote:
> complexity : O(n) + O(nlogn)
>
> Sweety wrote:
> > Question :Let A[1..n] be an array of integers. Design an efficient
> > divide and conquer algorithm to determine if A contains a majority
> > element, i.e an element appears more than n/2 times in A. What is the
> > time complexity of your algorithm?
>
> > Answer:
> > a[1..n] is an array
> > int majorityElement(int a[], int first, int last)
> > {
> >          If (first = = last)
> >         {
> >         return a[first];     // Array has one element and its count = 1
> > and it is major element
> >          }
> >         mid= (first+last)/2;
>
> >        (majorL,countL)= majorityElement(a,first,mid);
> >        (majorR,countR)= majorityElement(a,mid
> > +1,last);
> >         n = total elements in an array;
> >       If(majorL==majorR)
> >         return(countL+countR);
> >      else
> >      {
> >            If(countL>countR)
> >                 return(majorL,countL);
> >           elseif(countL< countR)
> >                 return(majorR,countR);
> >           else
> >                return(majorL,majorR);
> >       }
> >          if(countL>n/2)
> >             temp1=majorL;
> >       if(countR>n/2)
> >              temp2=majorR;
>
> >    If(temp1 = = temp2)
> >           return temp1;
> >   elseif(countL>countR)
> >          return temp1;
> >  else (countR>countL)
> >         return temp2;
> > else
> >       return -1;
> > }
>
> > int main()
> > {
> >       int a[8] = {2,3,2,2,4,2,2,2};
> >       int first =1;
> >       int last=8;   //change the value of last when the array
> > increases or decreases in size
> >       int x = majorityElement(a,first,last);
> >       if(x= = -1)
> >             printf(“No Majority Element”)
> >       else
> >           Majority element = x;
> >  }

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algogeeks@googlegroups.com.
To unsubscribe from this group, send email to 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.



[algogeeks] Re: Need help on Divide and Conquer Algorithm

2011-04-14 Thread vishwakarma
complexity : O(n) + O(nlogn)

Sweety wrote:
> Question :Let A[1..n] be an array of integers. Design an efficient
> divide and conquer algorithm to determine if A contains a majority
> element, i.e an element appears more than n/2 times in A. What is the
> time complexity of your algorithm?
>
> Answer:
> a[1..n] is an array
> int majorityElement(int a[], int first, int last)
> {
>  If (first = = last)
> {
>return a[first]; // Array has one element and its count = 1
> and it is major element
>  }
> mid= (first+last)/2;
>
>(majorL,countL)= majorityElement(a,first,mid);
>(majorR,countR)= majorityElement(a,mid
> +1,last);
> n = total elements in an array;
>   If(majorL==majorR)
> return(countL+countR);
>  else
>  {
>If(countL>countR)
> return(majorL,countL);
>   elseif(countL< countR)
> return(majorR,countR);
>   else
>return(majorL,majorR);
>   }
>  if(countL>n/2)
> temp1=majorL;
>   if(countR>n/2)
>  temp2=majorR;
>
>If(temp1 = = temp2)
>   return temp1;
>   elseif(countL>countR)
>  return temp1;
>  else (countR>countL)
> return temp2;
> else
>   return -1;
> }
>
> int main()
> {
>   int a[8] = {2,3,2,2,4,2,2,2};
>   int first =1;
>   int last=8;   //change the value of last when the array
> increases or decreases in size
>   int x = majorityElement(a,first,last);
>   if(x= = -1)
> printf(“No Majority Element”)
>   else
>   Majority element = x;
>  }

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algogeeks@googlegroups.com.
To unsubscribe from this group, send email to 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.