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

ep=: 4 : 0
 if. x={:$y do. y
 else. 
  t0=.0,. >: x cmb&<: {:$ y
  (t0{"_ 1 y),"1 t1=:x ep (<@<@<"1 t0) {"1 y
 end.
)

EqPrts=: 4 : '(-y%x)<\"1 ,/"3^:([EMAIL PROTECTED]) (y%x) ep i.y'

   2 EqPrts 6
+-----+-----+
|0 1 2|3 4 5|
+-----+-----+
|0 1 3|2 4 5|
+-----+-----+
|0 1 4|2 3 5|
+-----+-----+
|0 1 5|2 3 4|
+-----+-----+
|0 2 3|1 4 5|
+-----+-----+
|0 2 4|1 3 5|
+-----+-----+
|0 2 5|1 3 4|
+-----+-----+
|0 3 4|1 2 5|
+-----+-----+
|0 3 5|1 2 4|
+-----+-----+
|0 4 5|1 2 3|
+-----+-----+


R.E. Boss


> -----Oorspronkelijk bericht-----
> Van: [EMAIL PROTECTED] [mailto:programming-
> [EMAIL PROTECTED] Namens Tirrell, Jordan (Intern)
> Verzonden: donderdag 24 juli 2008 0:16
> Aan: Programming forum
> Onderwerp: RE: [Jprogramming] equal-size partitions
> 
> Sorry, I was using a different form of 'partition' than the one on the
> JWiki. I want all ways to separate the objects i.n into k disjoint sets of
> size n%k (for n,k). Since they are the same size, this is just the
> singular case k$n%k in the JWiki use of partition.
> 
> 
> 
> That is, for the example n=6, k=2, I want all ways to APPLY the partition
> 3 3 to 6 distinct objects, say 0 1 2 3 4 5. The only ten cases follow.
> 
> 
> 
>    ]part=: ((0&=)@{."1#])~.(([EMAIL PROTECTED] A. i.) 6) {"1 (3#i.2)
> 
> 0 0 0 1 1 1
> 
> 0 0 1 0 1 1
> 
> 0 0 1 1 0 1
> 
> 0 0 1 1 1 0
> 
> 0 1 0 0 1 1
> 
> 0 1 0 1 0 1
> 
> 0 1 0 1 1 0
> 
> 0 1 1 0 0 1
> 
> 0 1 1 0 1 0
> 
> 0 1 1 1 0 0
> 
> 
> 
>    part </."1 i.6
> 
> ------T-----┐
> 
> │0 1 2│3 4 5│
> 
> +-----+-----+
> 
> │0 1 3│2 4 5│
> 
> +-----+-----+
> 
> │0 1 4│2 3 5│
> 
> +-----+-----+
> 
> │0 1 5│2 3 4│
> 
> +-----+-----+
> 
> │0 2 3│1 4 5│
> 
> +-----+-----+
> 
> │0 2 4│1 3 5│
> 
> +-----+-----+
> 
> │0 2 5│1 3 4│
> 
> +-----+-----+
> 
> │0 3 4│1 2 5│
> 
> +-----+-----+
> 
> │0 3 5│1 2 4│
> 
> +-----+-----+
> 
> │0 4 5│1 2 3│
> 
> L-----+------
> 
> 
> 
> I hope this clarifies.
> 
> 
> 
> 
> 
> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:programming-
> [EMAIL PROTECTED] On Behalf Of Henry Rich
> Sent: Wednesday, July 23, 2008 2:09 PM
> To: 'Programming forum'
> Subject: RE: [Jprogramming] equal-size partitions
> 
> 
> 
> http://www.jsoftware.com/jwiki/Essays/Partitions
> 
> 
> 
> Henry Rich
> 
> 
> 
> > -----Original Message-----
> 
> > From: [EMAIL PROTECTED]
> 
> > [mailto:[EMAIL PROTECTED] On Behalf Of
> 
> > Tirrell, Jordan (Intern)
> 
> > Sent: Wednesday, July 23, 2008 2:05 PM
> 
> > To: [email protected]
> 
> > Subject: [Jprogramming] equal-size partitions
> 
> >
> 
> > I am currently stumped by what seems to be a natural problem
> 
> > and I think
> 
> > it is likely someone else has encountered it, or at least knows how to
> 
> > do it far better than me.
> 
> >
> 
> >
> 
> >
> 
> > I want all partitions of a given number of objects (say n)
> 
> > into a given
> 
> > number of equal-size pieces (say k, which divides n).
> 
> >
> 
> >
> 
> >
> 
> > It is easy to use permutations to do this in small cases,
> 
> > like n=6, k=2:
> 
> >
> 
> >
> 
> >
> 
> > (([EMAIL PROTECTED] A. i.) 6) {"1 (3#i.2)
> 
> >
> 
> >
> 
> >
> 
> > But since this permutes non-distinct elements, there are 720 results,
> 
> > but only 20 are unique. And since a partition is not ordered,
> 
> > 0 0 0 1 1
> 
> > 1 is equivalent to 1 1 1 0 0 0, and so really we reduce to 10 cases.
> 
> >
> 
> >
> 
> >
> 
> > But the obvious problem comes in because I want to do this many times
> 
> > for larger numbers. Moving up to only n=12 creates a limit
> 
> > error for me:
> 
> >
> 
> >
> 
> >
> 
> > ([EMAIL PROTECTED] A. i.) 12
> 
> >
> 
> >
> 
> >
> 
> > There are 479001600=!12 cases here, though if k=3 we would reduce them
> 
> > to a very reasonable 11550=(!12)%3*(!4)^3 cases.
> 
> >
> 
> >
> 
> >
> 
> > I could use a loop to go through every permutation and take only the
> 
> > ones I consider to be unique, but this is a lot of extra
> 
> > computation. It
> 
> > seems to me that there should be an elegant and quick way to
> 
> > do this in
> 
> > J, but I cannot figure out what it is.
> 
> >
> 
> >
> 
> >
> 
> >
> 
> >
> 
> > An Idea:
> 
> >
> 
> > I was thinking that I could represent one of these partitions by a
> 
> > matrix where each row represents a segment in the partition, and that
> 
> > row contains the locations of the objects in that segment.
> 
> >
> 
> > p=: 4#i.3
> 
> >
> 
> > > p </. i. # p
> 
> >
> 
> > 0 1  2  3
> 
> >
> 
> > 4 5  6  7
> 
> >
> 
> > 8 9 10 11
> 
> >
> 
> > If you permute elements only from one row to another and continually
> 
> > apply /:~ and /:~"1 these correspond exactly to the unique
> 
> > cases I want.
> 
> > Any ideas on how to do this efficiently?
> 
> >
> 
> >
> 
> >
> 
> >
> 
> >
> 
> >
> 
> >
> 
> > Thanks,
> 
> >
> 
> >
> 
> >
> 
> > Jordan Tirrell
> 
> >
> 
> > [EMAIL PROTECTED]
> 
> >
> 
> >
> 
> >
> 
> > a.{~74++/\0,37,(}:,(<:&{:))@(],-&])3 _14
> 
> >
> 
> > a.{~84+0,(((-&2)&{.),}.)(6*3>i.6)&+,~17,,~24
> 
> >
> 
> > ----------------------------------------------------------------------
> 
> > 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