有三组数A,B,C,每组的个数分别为2,3,4. 元素分别为1 2;3 4 5 ;6 7 8 9; 现需要生成所有的排列,其中
有三组数A,B,C,每组的个数分别为2,3,4. 元素分别为1 2;3 4 5 ;6 7 8 9; 现需要生成所有的排列,其中
有三组数A,B,C,每组的个数分别为2,3,4.
元素分别为1 2;3 4 5 ;6 7 8 9;
现需要生成所有的排列,其中中组间元素交换视为有效.例如 12 345 6789 -》12 346 5789视为有效的变换(其中B组元素5和C组元素6交换),组内元素的全排列视为无效(例如12 345 6789-》21 345 6789视为无效变换.如果从1-9的元素坐全排列的话需要计算和移动将近400万次(计算需要花费10多分钟).而其实实际有效的数据只有1260次,所以各位不知道有什么好多办法解决这个问题没有?
1,2;可变为12,21存在A不变:
3与6789中任一交换后做全排列,再4交换,再5交换;再34,45,35与6789任两个交换后全排列;再345与6789任三个交换后全排列后可得次数=2×(12×6×24+18×6×24+4×6×24)
345;可同上全排列存于B不变:
1与6789中任一交换后全排列,再2交换;再12与6789中任两个交换后全排列后可得次数=6×(8×2×24+6×2×24)
6789;全排列存于C中不变:
同上交换后全排列可得次数=24×(6×2×6+3×2×6)
算得的数字好像和你的不一样(可能还有其他要求)(每秒几亿次的速度还要10分钟)应该这么计算 总共9个数 那么就是9!个,然而每个组的全排列有 2!,3!,4!,所以总体个数是9!/2!*3!*4!=1260 而且我要怎么生成快速生成这样的序列。。你可以打印用for循环打印400万个数看看。。时间根本不跟你想的那样你要的是具体实现的代码?还有9!/2!*3!*4!=1260 (用除法不是很明白),还有原题是怎么说的大概说说算法的思路。有代码也行啊。9!/2!*3!*4!=1260 这个的意思。我把九个数字全排列。其中每种排列都有2!*3!*4!个重复的。所以除