我有一个144个元素的数组(整数),我想在Matlab中找到所有可能的排列。但是"问题"是所有这些整数只能有五个不同的值:11,22,33,44和55(这些值并不重要,但无论如何)因此改变,让我们说两个11&彼此没有做出新的排列。我想要的只是找到独特的排列。
Matlab具有函数perms
,它可以找到所有可能的排列并将它们放在表格中。但是因为它找到所有可能的排列而不仅仅是唯一的排列,它在我的情况下不起作用,因为结果表将有144个!太多的行使我的机器(i7 cpu,8gb ram)耗尽内存。如果perms
有效,我可以只保留唯一的行,如果我没有错,那应该是144!/ n(11)!* n(22)!* n(33)!* n( 44)!* n(55)!,其中n(p)=数字p出现的次数和n(11)+ n(22)+ n(33)+ n(44)+ n(55)= 144。 / p>
有没有办法让perms
使用144个元素的数组工作,或者更好的方法来找到只有必要的排列?另一种解决方案是能够获得所有144个!没有将它们存储在表格中的排列(我会在它们生成时逐个使用它们)。但我不知道如何做以上任何一项。
======================================
P.S。:我也试过uint8
试图阻止perms
消耗太多内存,但这还不够。
P.S.2:从144开始!是大于144!/ n(11)!* n(22)!* n(33)!* n(44)!* n(55)!,只找到必要排列的解决方案会更好但是即使你知道如何找到所有可能的排列,然后我可以保留独特的排列,请回复
P.S.3:我不确定是否应该拨打#34;排列"或者"组合"我在寻找什么,因为在某种程度上它是两者兼而有之。无论如何,我决定在我的问题中称它们为排列。