假设我有n个元素的列表,我知道有n个元素! 可能的方法来订购这些元素。 什么是algorithm来生成这个列表的所有可能的顺序? 例如,我有列表[a,b,c]。 该algorithm会返回[a,b,c],[a,c,b,],[b,a,c],[b,c,a],[c,a,b],[c,b , 一个]]。 我正在阅读这里http://en.wikipedia.org/wiki/Permutation#Algorithms_to_generate_permutations 但维基百科从来没有擅长解释。 我不太了解。
我试图recursion地生成列表中的所有项目。 我已经看到了类似的问题的一些解决scheme,但我一直无法让我的代码工作。 有人可以指出我可以如何解决我的代码? 这对所有的S / O'er都是开放的,而不仅仅是Java人。 (另外我应该注意,它与SO例外崩溃)。 示例input:[1,2,3] 输出:[1,2,3] [1,3,2] [2,1,3] [2,3,1] [3,1,2] [3,2,1] //allPossibleItems is an AL of all items //this is called with generatePerm(null, new ArrayList<Item>); private void generatePerm(Item i, ArrayList<Item> a) { if(i != null) { a.add(i); } if (a.size() == DESIRED_SIZE){ permutations.add(a); return; } for(int j = 0; j < allPossibleItems.size(); […]
我怎样随机洗牌,以保持原有的位置? 换句话说,给定一个具有不同元素的列表A ,我想生成它的排列B 这个排列是随机的 并且对于每个n , a[n] != b[n] 例如 a = [1,2,3,4] b = [4,1,2,3] # good b = [4,2,1,3] # good a = [1,2,3,4] x = [2,4,3,1] # bad 我不知道这样一个排列的恰当的术语(这是“总”?),因此很难search。 正确的名词似乎是“混乱”。
要求:algorithm生成一个集合的所有可能的组合,不重复,或recursion调用函数返回结果。 大多数,如果不是所有的答案在JavaScript的排列提供? 从循环或其他函数中recursion调用函数以返回结果。 循环内的recursion函数调用的示例 function p(a, b, res) { var b = b || [], res = res || [], len = a.length; if (!len) res.push(b) else for (var i = 0; i < len // recursive call to `p` here ; p(a.slice(0, i).concat(a.slice(i + 1, len)), b.concat(a[i]), res) , i++ ); return res } […]
我希望得到一个数字的所有组合,而不是重复。 像0.1.2,0.2.1,1.2.0,1.0.2,2.0.1,2.1.0一样。 我试图find一个简单的scheme,但不能。 我画了一个图/树,这尖叫使用recursion。 但是,如果这是可能的,我想这样做没有recursion。 任何人都可以帮我做到这一点?
我有一个ArrayList [] myList,我试图创build一个数组中的所有值的排列列表。 例子:(所有的值都是string) myList[0] = { "1", "5", "3", "9" }; myList[1] = { "2", "3" }; myList[2] = { "93" }; myList的数量可以改变,所以它的长度是事先不知道的。 我希望能够生成类似于以下的所有排列的列表(但有一些额外的格式)。 1 2 93 1 3 93 5 2 93 5 3 93 3 2 93 3 3 93 9 2 93 9 3 93 这是否意味着我正在努力完成什么? 我似乎无法想出一个好的方法来做到这一点,(如果有的话)。 编辑: 我不确定recursion是否会干扰我以我自己的方式格式化输出的愿望。 对不起,我没有提到我的格式是什么。 我想最终build立一个如下格式的所有组合的string[]数组: […]
在Python中,使用itertools模块生成列表的所有排列是非常简单的。 我有一个情况,我使用的列表只有两个字符(即“1122”)。 我想要生成所有独特的排列。 对于string“1122”,有6个独特的排列(1122,1212,1221等),但itertools.permutations将产生24个项目。 只logging独特的排列是很简单的,但是由于考虑了全部720个项目,所以收集这些排列所花费的时间会比所需要的长得多。 是否有一个函数或模块在产生排列时考虑重复的元素,所以我不必自己写?
我正在寻找一个algorithm,将采取数字或单词,并find所有可能的变化在一起,也让我定义了多less值一起去寻找。 例子可以说,string或数组是: cat dog fish 那么值为2的结果可以是: cat dog cat fish dog cat dog fish fish cat fish dog 因此,3个项目的结果是6个可能的变化,在2个结果匹配 与3匹配的结果是: cat dog fish cat fish dog dog cat fish dog fish cat fish cat dog fish dog cat 甚至可能更多的select 我已经find了这个例子的Stackoverflow上的链接,但这是在JavaScript中,我想知道是否有人知道如何在PHP中这样做也许有东西已经build成? http://www.merriampark.com/comb.htm (死链接)
我想生成一个集合(集合)的所有排列,如下所示: Collection: 1, 2, 3 Permutations: {1, 2, 3} {1, 3, 2} {2, 1, 3} {2, 3, 1} {3, 1, 2} {3, 2, 1} 一般来说,这不是一个“如何”的问题,而是关于如何最有效的问题。 另外,我不想生成所有的排列并返回它们,但是一次只产生一个排列,并且只在必要时才继续排列(就像迭代器一样 – 我也试过了,但是结果却less了有效)。 我已经testing了很多algorithm和方法,并提出了这个代码,这是我尝试过的最有效的代码: public static bool NextPermutation<T>(T[] elements) where T : IComparable<T> { // More efficient to have a variable instead of accessing a property var count = elements.Length; […]
我有一个string。 我想通过改变字符的顺序来从string中产生所有的排列。 例如,说: x='stack' 我想要的是这样一个列表, l=['stack','satck','sackt'…….] 目前,我正在迭代string的列表转换,随机选取2个字母,并将它们转换为一个新的string,并添加它以设置l的转换。 根据string的长度,我正在计算可能的排列数,并继续迭代,直到设置的大小达到极限。 必须有更好的方法来做到这一点。