登录论坛

查看完整版本 : [MATLAB数学相关] 求助,一个排列问题困扰了我三年。


bing_lonely
2009-09-10, 00:26
问题是这样的:从一个各元素不同的偶数个元素数组(比如[1 2 3 4 5 6])中任取两个元素的组合,然后将这些所有两个元素的组合分成若干组,每组都能重新组成新数组,而这个新数组正好与原来数组相同,问当这个偶数数组是1-100时,一共能排列成多少种,并一一列举出来。



比如数组1-6,[1 2 3 4 5 6],任意取两个元素一共有12,13,14,15,16,23,24,25,26,34,35,36,45,46,56十五种(6*5/2),将这十五个新元素可以不重复的组成5组新数组和原来一样,他们是:[12 34 56]、[13 25 46]、[14 26 35]、[15 24 36]、[16 23 45]——正好全部用完十五种不重复;



如果是数组1-8,[1 2 3 4 5 6 7 8],同样的做法我可以列出下面r1中的七组,这七组不重复的用完了所有8选2的共28种组合且没有重复的组成了新的原数组。

b1 =
8
r1 =
1.0200 7.0800 5.0600 3.0400
1.0300 6.0800 5.0700 2.0400
1.0400 6.0700 5.0800 2.0300
1.0500 4.0800 3.0700 2.0600
1.0600 4.0700 3.0800 2.0500
1.0700 4.0600 3.0500 2.0800
1.0800 4.0500 3.0600 2.0700



如果是数组1-16,我可以计算出共可以得到16*15/2/8=15组,并已经实现了matlab的编程列举如下:

b1 =
16
r1 =
1.0200 15.1600 13.1400 11.1200 9.1000 7.0800 5.0600 3.0400
1.0300 14.1600 13.1500 10.1200 9.1100 6.0800 5.0700 2.0400
1.0400 14.1500 13.1600 10.1100 9.1200 6.0700 5.0800 2.0300
1.0500 12.1600 11.1500 10.1400 9.1300 4.0800 3.0700 2.0600
1.0600 12.1500 11.1600 10.1300 9.1400 4.0700 3.0800 2.0500
1.0700 12.1400 11.1300 10.1600 9.1500 4.0600 3.0500 2.0800
1.0800 12.1300 11.1400 10.1500 9.1600 4.0500 3.0600 2.0700
1.0900 8.1600 7.1500 6.1400 5.1300 4.1200 3.1100 2.1000
1.1000 8.1500 7.1600 6.1300 5.1400 4.1100 3.1200 2.0900
1.1100 8.1400 7.1300 6.1600 5.1500 4.1000 3.0900 2.1200
1.1200 8.1300 7.1400 6.1500 5.1600 4.0900 3.1000 2.1100
1.1300 8.1200 7.1100 6.1000 5.0900 4.1600 3.1500 2.1400
1.1400 8.1100 7.1200 6.0900 5.1000 4.1500 3.1600 2.1300
1.1500 8.1000 7.0900 6.1200 5.1100 4.1400 3.1300 2.1600
1.1600 8.0900 7.1000 6.1100 5.1200 4.1300 3.1400 2.1500

以上每组都没重复的用完了所有16选2的组合形成新的1-16数组。



现在回到原问题:如果数组是20,30,乃至更多100的情况呢,比如1-100,我可以计算出共有100*99/2/50=99种新数组,但是再怎么努力我也不能把他们一一列举出来,我想了三年都没有成功,恳求各位高手帮我想想怎么编程序好,小生日后定当酬谢!我的信箱:[email protected]

abc886
2009-09-14, 17:18
这个我能搞定,加我 qq289037240 ,看见我上网的时候和我联系,我给你讲思路!