In http://www.jsoftware.com/pipermail/programming/2007-August/007819.html I
presented a more efficient verb than 'comb'
http://www.jsoftware.com/help/dictionary/cfor.htm to determine all
combinations. In Hui's essay
http://www.jsoftware.com/jwiki/Essays/Combinations it was used to describe
comb1 (without mentioning the origin).

Scott pointed me to
http://www.jsoftware.com/pipermail/programming/2007-February/005123.html ,
which led me to another idea on combinations, called 'comb3'. 

   rnk 5 ts&>'10 comb 20';'10 comb1 20';'10 comb3 20'  
2 1.27 1.20
1 1.03 1.24
0 1.00 1.00

So comb3 is 3% faster and 24% leaner than comb1.

   (10 comb1 20) -: 10 comb3 20
1

  comb3=: [:; [:(,.&.><@;\.)/ >:@[EMAIL PROTECTED]

(Perhaps a candidate for a Jem 
http://www.jsoftware.com/jwiki/DanBron#works_intended )


With a slight modification (of the starting items), comb3 can be used to
generate combinations with non-unique elements:

  comb3a=: [:; [:(,.&.><@;\.)/ (($,:)i.)

   2 comb3a 3
0 0
0 1
0 2
1 1
1 2
2 2

Notice that x=0 gives a domain error in both cases, but this can easily be
repaired (by ([EMAIL PROTECTED]:)`comb3 @.([EMAIL PROTECTED]) ).


R.E. Boss



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

Reply via email to