这听起来像是一个重复的问题,因为有几个类似的问题,但他们并没有特别要求这个(或者我还没找到它!:)) > 我有一个数组,这个有两个不同的元素,“a”和“b”,以及四个总元素的长度:
var list:Array = ["a","a","b","b"];
我正在寻找所有组合,使用所有元素,没有重复 这应该产生:
aabb
abab
abba
bbaa
baba
baab
为此寻找解决方案给了我类似的结果:
请注意,最终使用此函数的应用程序将具有两个不同的元素:“a”和“b”,以及总共50个元素的长度:
var list:Array = ["a","a","a","a","a","a","a","a","a","a",
"a","a","a","a","a","a","a","a","a","a",
"a","a","a","a","a",
"b","b","b","b","b","b","b","b","b","b",
"b","b","b","b","b","b","b","b","b","b",
"b","b","b","b","b"]
......所以像我和aabb一样使用蛮力解决方案是不可行的。
任何帮助,尤其是使用AS3代码,都会受到赞赏,即使它只是指向我正确的谷歌搜索:)
答案 0 :(得分:0)
以下是一个可以帮助您入门的JavaScript答案:Permutations in JavaScript?(它们都是EcmaScript实现,因此转换为ActionScript只需要进行细微更改)
它不处理唯一性要求,但它可能指向正确的方向。
但是,您可能需要首先考虑一些事项。我认为预先计算所有独特的排列是不可行的。
基于this answer about unique permutations,看起来25个和25个b的50! / 25! * 25! = 126,410,606,437,752
个唯一排列。
想一想这个数字有多大:如果每个组合在内存中是1个字节(实际上它将超过这个),那么在内存中就是:126410606437752 bytes = 126,410.6 gigabytes
。
另外,用于生成排列的算法具有复杂度O(n!)
- 因此可能需要太长时间,与内存约束分开,以生成排列列表。