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函数产生数组的组合,没有重复的主要内容,如果未能解决你的问题,请参考以下文章