@ankit...
I don't think the algorithm is correct...
The check "max_ending_here < 0 && max_limit_here <=k" doesn't look
correct...
Also I am not able to figure out the importance of 0 in the check ..

Ankit, may be I am wrong. Hence, can you come up with the algorithm
explaining ( with a set of steps ) what you are doing here...

On Dec 1, 11:12 pm, atul anand <atul.87fri...@gmail.com> wrote:
> @ankit : sorry dude , its not working for given input
>
> {2,1,3,4,5} k=12,
>  ans=12, sub-array={3,4,5}
>
> your algo will give ans=10 sub-array{0 to 3}
>
>
>
>
>
>
>
> On Thu, Dec 1, 2011 at 11:33 PM, Ankit Sinha <akki12...@gmail.com> wrote:
> > A little variation of kadane's algo will do as written below: -
>
> > #include "stdafx.h"
> > #include "stdlib.h"
>
> > int _tmain(int argc, _TCHAR* argv[])
> > {
> >        int a[5] = {-1,3,1,2,-3};
> >        int max_so_far= 0, max_ending_here= 0,max_limit_here=0,startIndex=0
> > ,
> > endIndex = 0, itr = 0;
> >        int k=12;
> >        for (itr = 0; itr<5;itr++)
> >        {
> >                max_ending_here +=a[itr];
> >                if (max_ending_here < 0 && max_limit_here <=k)
> >                {
> >                        max_ending_here = 0;
> >                        startIndex++;
> >                }
> >                else if (max_so_far <max_ending_here)
> >                {
> >                        if (max_ending_here <= k)
> >                        {
> >                                max_so_far = max_ending_here;
> >                                endIndex = itr;
> >                        }
> >                        else
> >                        {
> >                                max_limit_here = max_ending_here;
> >                                max_ending_here = 0;
>
> >                        }
> >                }
>
> >        }
>
> >        printf("%d%d%d", max_so_far, startIndex, endIndex);
> >        system("PAUSE");
> >        return 0;
> > }
> > Complexity O(n)
>
> > Cheers,
> > Ankit Sinha
> > On Thu, Dec 1, 2011 at 4:58 PM, sourabh <sourabhd2...@gmail.com> wrote:
> > > @atul...
> > > thanks dude for ur thorough screening of the algo and pointing out the
> > > mistakes... I think that's y its always said that until and unless we
> > > don't turn an algo to a working code we are never really sure whether
> > > its perfect and covers all the cases.
>
> > > On Dec 1, 4:23 pm, atul anand <atul.87fri...@gmail.com> wrote:
> > >> yup i made some calculation error....
>
> > >> Now this algo works perfectly :) :)
>
> > >> Thanks for your help and explanation :) :)
>
> > >> On Thu, Dec 1, 2011 at 4:26 PM, sourabh <sourabhd2...@gmail.com> wrote:
> > >> > @atul ...
>
> > >> > Reply 1:
> > >> > Yes, you are correct.. i missed it... Correct statement is as follows:
>
> > >> > 12 + 6 = 18 , closest element found = 15 , closest to X = 15 - 6 =9 ,
> > >> > i = 3, j = 4
> > >> > 12 + 10 = 22 , closest element found = 15 , closest to X = 15 - 10
> > >> > =5 , i = 4, j = 4
>
> > >> > -------------------------------------------------------------
>
> > >> > Reply 2:
> > >> > I might be wrong in calculating 12 + 2 = 14.... but i guess you are
> > >> > not getting my point .... even if 14 is the search element, still the
> > >> > element smaller than equal to 14 in array B is 10 and not 15...
>
> > >> > Hence, the above calculation that you have made are incorrect.
>
> > >> > If you look at the problem statement it says that we have to find the
> > >> > sum which is smaller than equal to X.
> > >> > Now, if you look ta ur calculations you will see that your 'closest to
> > >> > X' search space contains elements 13 which is invalid as it is greater
> > >> > than 12...
>
> > >> > Hence, i m re-calculating the values based on the above given
> > >> > algorithm...
>
> > >> > 12 + 2 = 14, closest element found = 10 , closest to X = 10 - 2 =
> > >> > 8   , i = 1, j = 3
>
> > >> > 12 + 3 = 15 , closest element found = 15 , closest to X = 15 - 3
> > >> > =12   , i = 2, j = 4
>
> > >> > 12 + 6 = 18 , closest element found = 15 , closest to X = 15 - 6 =
> > >> > 9   , i = 3 , j = 4
>
> > >> > 12 + 10 = 22 , closest element found = 15 , closest to X = 15 - 10 =
> > >> > 5 , i = 4 , j = 4
>
> > >> > Also, as calculated in the previous post the corner case gives 10 as
> > >> > the closest to X.
>
> > >> > Hence, max of all closest values to X = max { 8, 12, 9, 5, 10 } =
> > >> > 12.
>
> > >> > On Dec 1, 2:52 pm, atul anand <atul.87fri...@gmail.com> wrote:
> > >> > > and you made mistake above in calculating 12 + 2 = *12* , its 14
>
> > >> > > 12 + 2 = 14, closest element found = 15 , closest to X = 15 - 2 =
> > 13   ,
> > >> > i
> > >> > > = 1, j = 4
> > >> > > 12 + 3 = 15 , closest element found = 15 , closest to X = 15 - 3
> > =12   ,
> > >> > i
> > >> > > = 2, j = 4
> > >> > > 12 + 6 = 18 , closest element found = 15 , closest to X = 15 - 6 =
> > 11
> > >> > , i
> > >> > > = 3 , j = 4
> > >> > > 12 + 10 = 22 , closest element found = 15 , closest to X = 15 - 10
> > = 5 ,
> > >> > i
> > >> > > = 4 , j = 4
>
> > >> > >  out of {10,13,12,11,5 } , element 12 is closest to X ( which is
> > 12) .
> > >> > > So basically among this we have to find element closest X ( where
> > >> > element <
> > >> > > = X )
> > >> > > hence 12 is the answer.
>
> > >> > > On Thu, Dec 1, 2011 at 3:11 PM, atul anand <atul.87fri...@gmail.com
>
> > >> > wrote:
> > >> > > > @sourabh
>
> > >> > > > i guess you need to modify this statement :-
>
> > >> > > > 3) Now for each element B[i][0] , do a (modified) binary *search
> >  for
> > >> > > > the closest value smaller than equal to (X + B[i][0])* in array
> > B[i
> > >> > > > +1... n][0] ,
> > >> > > > Say the found index after binary search is j ( which is > i)...
>
> > >> > > > 12 + 2 = 12 , closest element found = 10 , closest to X = 10 - 2
> > = 8 ,
> > >> >  i
> > >> > > > = 1, j = 3
> > >> > > > 12 + 3 = 15 , closest element found = 15 , closest to X = 15 - 3
> > =12 ,
> > >> > i =
> > >> > > > 2, j = 4
> > >> > > > 12 + 6 = 18 , closest element found = *no element found ??? how *
>
> > >> > > > *Cumulative SUM*
>
> > >> > > > *i*
>
> > >> > > > 2
>
> > >> > > > 0
>
> > >> > > > 3
>
> > >> > > >  1
>
> > >> > > > 6
>
> > >> > > >  2
>
> > >> > > > 10
>
> > >> > > >  3
>
> > >> > > > *15*
>
> > >> > > >  4
>
> > >> > > > for 12 + 6 =18 , closest element less than equal to 18 = 15 (15 <
> > 18 )
> > >> > > > ..right ??
>
> > >> > --
> > >> > 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.
>
> > --
> > 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.

Reply via email to