【发布时间】:2013-12-16 11:45:56
【问题描述】:
我正在寻找一种为这个问题制作程序的好方法:
首先给出一个带有字符串值的数组:
var array1 = ["a", "b", "c", "d"]
接下来我想将字符串值的所有可能组合(顺序)存储在新数组中
例如:
combo1 = ["a", "b", "d", "c"]
combo2 = ["a", "c", "b", "d"]
combo3 = [...etc.]
程序还需要能够处理大数组。例如,第一个数组 (array1) 中最多有 20 个项目。所以它需要用一个函数自动完成创建“组合数组”的所有工作。
解决这个问题的好方法是什么?最好使用 JavaScript,但我愿意用其他语言了解它。
正如您可能已经猜到的那样,在编程方面,我是一个相当初学者。我已经掌握了基础知识,现在正在尝试为一个项目编写一个程序。请帮助并提前感谢您!
【问题讨论】:
-
你有没有为此想出任何算法?
-
这些被称为排列。如果您尝试计算大型列表(例如 20 个项目)的排列,您可能会耗尽内存。 20 个项目的列表有 20 个阶乘排列......这是 2.432902 x 10^18 或超过 200 万个不同的组合。
-
存储结果的另一种方法是在每次生成新结果时都有一个回调,您将一个排列传递给它。这样您就可以避免存储所有结果的内存需求。但是,您只是将问题从内存限制之一转移到执行时间之一。
-
@SpoonMeiser 我前段时间就这个想法写了一个答案:stackoverflow.com/a/18874247/1669279 你说得对,问题固有的指数复杂性意味着执行时间对于许多项目来说太长了。 20 可能太多了。
-
我忽略了内存问题。所以现在我将它保留在 5 个项目上,如果我是正确的,应该返回 120 个结果。我还没有想出一个可行的算法,但我的第一直觉是使用 for 循环。
标签: javascript arrays combinations