AS3函数产生数组的组合,没有重复

时间:2018-03-05 14:21:52

标签: actionscript-3 combinations

这听起来像是一个重复的问题,因为有几个类似的问题,但他们并没有特别要求这个(或者我还没找到它!:)) > 我有一个数组,这个有两个不同的元素,“a”和“b”,以及四个总元素的长度:

    var list:Array = ["a","a","b","b"];  

我正在寻找所有组合,使用所有元素,没有重复 这应该产生:

    aabb
    abab
    abba
    bbaa
    baba
    baab

为此寻找解决方案给了我类似的结果:

  • a,b,ab,ba,aab,abb,aba,
  • a a b b, a b b, a ab b

请注意,最终使用此函数的应用程序将具有两个不同的元素:“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代码,都会受到赞赏,即使它只是指向我正确的谷歌搜索:)

1 个答案:

答案 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!) - 因此可能需要太长时间,与内存约束分开,以生成排列列表。