A version using /\. and then backtracking to find the combination:

   kv =. (] >. [EMAIL PROTECTED] |.!.0 +)&.>/\. @: ((, <@(0 #~ >:))~ <"0)
   kw =. [: (] - {~)&.>/\.   <@[ ,~ [: |.   ] *&.> 2 ~:&.>/\ kv
   kx =. 0 -.~ 2 -~/\ >@kw
   10 kx 1 2 3 5 6
5 3 2 

Henry Rich

> -----Original Message-----
> From: [EMAIL PROTECTED] 
> [mailto:[EMAIL PROTECTED] On Behalf Of Henry Rich
> Sent: Saturday, May 05, 2007 1:19 PM
> To: 'Programming forum'
> Subject: RE: [Jprogramming] Knapsack problem?
> 
> I didn't know that.  The last version on that page seems like a
> good candidate for conversion to J.  Here I assume that the value v
> is the same as the weight w:
> 
> kv =. [: > [: (] >. [EMAIL PROTECTED] |.!.0 +)&.>/ ((, <@(0 #~ >:))~ <"0)
>    10 kv 1 1 5 7 6
> 0 1 2 2 2 5 6 7 8 9 9
> 
> I don't have any good test data for this, but I tried a bunch
> of small combinations and it seemed to come up with the right
> answers.
> 
> The end part ((, <@(0 #~ >:))~ <"0)  is just boxing operands for
> the insert.
> 
> The (] >. [EMAIL PROTECTED] |.!.0 +)&.>/  does the nested loops shown on the 
> page.
> 
> This returns the best weight as {: of the result.
> I don't see any easy way to find
> the combination of inputs that produces that weight.  I suppose
> if you used /\. rather than / there might be enough history to
> figure out the combination.
> 
> Henry Rich
>  
> 
> > -----Original Message-----
> > From: [EMAIL PROTECTED] 
> > [mailto:[EMAIL PROTECTED] On Behalf Of John Randall
> > Sent: Saturday, May 05, 2007 12:05 PM
> > To: Programming forum
> > Subject: Re: [Jprogramming] Knapsack problem?
> > 
> > bill lam wrote:
> > > I want to burn data files to dvd of 4.5G
> > >     ?.20#1000
> > > 146 755 79 852 854 439 660 257 60 594 246 478 713 318 151 
> > 92 178 260 90
> > > 862
> > >
> > > how to find the subset of numbers such that their sum is 
> > nearest but not
> > > exceeding 4500?
> > >
> > >
> > 
> > If you have n integer weights with a total weight W, you 
> can do it by
> > dynamic programming in time O(nW).  See, for example
> > 
> > http://cgm.cs.mcgill.ca/~msuder/courses/360/lectures/integer-k
> > napsack.html
> > 
> > This is usually done recursively with memoization: you may want to
> > consider something else in J.
> > 
> > For small n, you can calculate all sums with O(2^n).
> > 
> > Best wishes,
> > 
> > John
> > 
> > 
> ----------------------------------------------------------------------
> > For information about J forums see 
> > http://www.jsoftware.com/forums.htm
> 
> ----------------------------------------------------------------------
> For information about J forums see 
> http://www.jsoftware.com/forums.htm

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to