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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AS3函数产生数组的组合,没有重复相关的知识,希望对你有一定的参考价值。

这听起来像一个重复的问题,因为有几个类似的问题,但他们没有具体问这个(或者我只是没有找到它!:)) 我有一个数组,这个有两个不同的元素,“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 b 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代码,将不胜感激,即使它只是指向我正确的谷歌搜索:)

答案

这是一个可以帮助您入门的javascript答案:Permutations in JavaScript?(它们都是EcmaScript实现,因此转换为ActionScript应该只需要进行细微更改)

它不处理唯一性要求,但它可能指向正确的方向。

但是,您可能需要首先考虑一些事项。我认为预先计算所有独特的排列是不可行的。

基于this answer about unique permutations,看起来有50! / 25! * 25! = 126,410,606,437,752独特的排列25 a和25 b。

想知道这个数字有多大:如果每个组合在内存中是1个字节(实际上它将超过这个)那么那就是:内存中的126410606437752 bytes = 126,410.6 gigabytes

此外,用于生成置换的算法具有复杂性O(n!) - 因此可能需要太长时间,与内存约束分开,以生成置换列表。

以上是关于AS3函数产生数组的组合,没有重复的主要内容,如果未能解决你的问题,请参考以下文章

Flash as3 如何删除数组中的重复项?

JavaScript 代码片段

AS3:从数组中获取平均值[重复]

有没有办法将2个非常相似的代码片段组合成一个函数并重复?

处理产生奇怪结果的字节数组的字符串构造函数[重复]

精心收集的 48 个 JavaScript 代码片段,仅需 30 秒就可理解!(转载)