I was looking at par2 earlier today, with a view to making it tacit,  and 
noticed that removing duplicate solutions with ~. greatly increases the running 
time.  I suppose that’s because the array is boxed.  Doing ~. after the sort 
doesn’t help.  

Limited tests suggest the tacit version’s performance is similar to that for 
the explicit one.

Mike

Please reply to [email protected].      
Sent from my iPad

> On 26 Oct 2017, at 09:55, Erling Hellenäs <[email protected]> wrote:
> 
> Hi all !
> 
> The last comment should be:
> 
> NB. Select the unique combinations. Sort to display nicely
> sort ~. w
> 
> Cheers,
> 
> Erling
> 
> 
>> Den 2017-10-26 kl. 10:38, skrev Erling Hellenäs:
>> Hi all !
>> 
>> I analysed Esa Lippus solution. The printout is long, but here is the code 
>> and my explanations.
>> 
>> par2=: 4 : 0
>> a=.(y#x) #: i. x^y
>> sort ~.((x=#@~."1 a)#a) </."1 i.y
>> )
>> sort=: /:~
>> 3 par2 5
>> x=:3
>> y=:5
>> NB. All combinations of y elements
>> [a=:(y#x) #: i. x^y
>> NB. Select the combinations in which the y elements
>> NB. are distributed over x buckets
>> [v=: ((x=#@~."1 a)#a)
>> NB. Pack the elements in each bucket combination.
>> [w=:v </."1 i.y
>> NB. Sort to display nicely
>> sort ~. w
>> 
>> Cheers,
>> 
>> Erling Hellenäs
>> 
>> 
>>> Den 2017-10-26 kl. 07:07, skrev 'Skip Cave' via Programming:
>>> Lippu,
>>> 
>>> Yes, your par2 is MUCH faster than Raul's nparts. If I have some time, I
>>> will put together a time/space test for all the proposed solutions.
>>> 
>>> Skip
>>> 
>>> Skip Cave
>>> Cave Consulting LLC
>>> 
>>>> On Wed, Oct 25, 2017 at 1:58 PM, Lippu Esa <[email protected]> wrote:
>>>> 
>>>> Hello,
>>>> 
>>>> I get the following with the partition verb I posted last Thursday (J8.06
>>>> and 4 core 2.9GHz CPU and 16GB RAM):
>>>> 
>>>> par2=: 4 : 0
>>>> a=.(y#x) #: i. x^y
>>>> sort ~.((x=#@~."1 a)#a) </."1 i.y
>>>> )
>>>> 
>>>>     ts '#5 par2 8'
>>>> 4.15977615 151821824
>>>>     ts '# 6 par2 8'
>>>> 2.55073168 358252032
>>>> 
>>>> Esa
>>>> 
>>>> -----Original Message-----
>>>> From: Programming [mailto:[email protected]] On
>>>> Behalf Of 'Skip Cave' via Programming
>>>> Sent: Wednesday, October 25, 2017 8:12 PM
>>>> To: [email protected]
>>>> Subject: Re: [Jprogramming] Partitions
>>>> 
>>>> Raul got it right with his nparts verb. In my original example of par, I
>>>> constructed the required output of par by hand. In that process, I
>>>> overlooked the majority of the possible combinations of the ways that 5
>>>> items could be separated into 3 containers. That caused confusion in the
>>>> various attempts to implement what I proposed. I wasn't very thorough in
>>>> vetting my example output, and Mike valiantly tried to point out the flaws
>>>> in my proposal. Raul showed how much I missed clearly in my par example
>>>> when he demonstrated:
>>>> 
>>>>     #3 nparts 5
>>>> 25
>>>>     #3 par 5
>>>> 6
>>>> 
>>>> Rob also pointed out the issue in his posts. Erling's v7 verb got to the
>>>> same result as Raul's nparts.
>>>> 
>>>> The number of possible partitions of n objects grows rapidly with n:
>>>> 
>>>>      #3 nparts 5
>>>> 
>>>> 25
>>>> 
>>>>      #3 nparts 6
>>>> 
>>>> 90
>>>> 
>>>>      #3 nparts 7
>>>> 
>>>> 301
>>>> 
>>>>      #3 nparts 8
>>>> 
>>>> 966
>>>> 
>>>> 
>>>> 
>>>> Increasing the number of partitions reduces the number of combinations but
>>>> significantly increases execution time with Raul's nparts :
>>>> 
>>>> 
>>>>     #4 nparts 8
>>>> 
>>>> 1701
>>>> 
>>>>     #5 nparts 8
>>>> 
>>>> 1050
>>>> 
>>>>     #6 nparts 8
>>>> 
>>>> 266
>>>> 
>>>> 
>>>> The 5 #nparts 8  took over 30 seconds to run on my i7 laptop. The #6 nparts
>>>> 8 took about 3 minutes.
>>>> 
>>>> 
>>>> Is there a more computationally efficient way to calculate the partitions?
>>>> 
>>>> 
>>>> Skip
>>>> ----------------------------------------------------------------------
>>>> 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
>> 
>> ----------------------------------------------------------------------
>> 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