|
|
|
|
||||||
![]() |
|
|
LinkBack | Outils de la discussion |
|
|
#1 |
|
Messages: n/a
Hébergeur: |
Hi,
I have a problem involving combinatorics and permutations and my brain hurts. The problem: I have a hash of products in input. I then build an array of equivalent products for each input product. I end up with an array such as this: { :input_prod_1 => [:p1_1, :p1_2, ... , p1_x], :input_prod_2 => [:p2_1, :p2_1, ..., p2_y], ... :input_prod_m => [:pm_1, :pm_1, ..., pm_z] } I need all the unique combinations of each product from the first group with each of the second. For example: given: [ [:p1, :p2], [:p3, p4] ] I need to obtain: [ [:p1, :p3], [:p1, :p4], [:p2, :p3], [:p2, :p4] ] Given: [ [:p1], [:p2, :p3, :p4] ] I need: [ [:p1, :p2], [:p1, :p3], [:p1, :p4] ] The number of input products is in the order of tens (max); the same goes for the number of equivalent products. This means the total number of partitions is pretty large and I need to weed out the equivalent ones soon/fast enough to reduce the total number. I've been making attempts with the permutation gem all morning; looks like it's doing the "right thing", but frankly my maths skills are lacking and I can't really figure out how to use it (should I?). Also: order is not important for the result arrays. This is easy, right? :-/ |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
|
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
On Mar 11, 5:06 am, David Palm <dvd...@gmail.com> wrote:
> I need all the unique combinations of each product from the first group with each of the second. For example: > given: [ [:p1, :p2], [:p3, p4] ] > I need to obtain: [ [:p1, :p3], [:p1, :p4], [:p2, :p3], [:p2, :p4] ] > > Given: [ [:p1], [:p2, :p3, :p4] ] > I need: [ [:p1, :p2], [:p1, :p3], [:p1, :p4] ] p [[1,2],[3,4]].inject([[]]){|old,lst| lst.inject([]){|new,e| new + old.map{|c| c.dup << e}}} |
|
|
|
#4 |
|
Messages: n/a
Hébergeur: |
On Tue, 11 Mar 2008 20:40:11 +0900, William James wrote:
> p [[1,2],[3,4]].inject([[]]){|old,lst| > lst.inject([]){|new,e| new + old.map{|c| c.dup << e}}} awesome. Totally rocks. |
|
![]() |
| Outils de la discussion | |
|
|