Tag: 置换

有效地确定置换的奇偶性

我有一个长度为N的int[]数组,其中包含值0,1,2,….(N-1),即它表示整数索引的排列。 确定排列是奇数还是奇偶校验的最有效方法是什么? (如果可能的话,我特别希望避免为临时工作空间分配对象……)

在Java中实现置换算法的技巧

作为学校项目的一部分,我需要编写一个函数,该函数将采用整数N并返回数组{0,1,…,N-1}的每个排列的二维数组。 声明看起来像public static int [] [] permutations(int N)。 http://www.usna.edu/Users/math/wdj/book/node156.html中描述的算法是我决定实现它的方法。 我使用ArrayLists的数组和数组以及ArrayLists的ArrayLists进行了一段时间的摔跤,但到目前为止,我一直很沮丧,特别是试图将2d ArrayList转换为2d数组。 所以我用javascript编写了它。 这有效: function allPermutations(N) { // base case if (N == 2) return [[0,1], [1,0]]; else { // start with all permutations of previous degree var permutations = allPermutations(N-1); // copy each permutation N times for (var i = permutations.length*N-1; i >= 0; i–) […]

我有24个项目需要分成6组4.我可以使用什么算法来查找所有可能的组合?

我有24个独特的项目。 我需要将它们分成6组,每组由4个项目组成。 我可以使用什么算法来迭代考虑订单的这24个项目的所有可能组合/分离是不相关的 例如,一个这样的组合将是: ABCD-EFGH-IJKL-MNOP-QRST-UVWX ^因为顺序不重要,所以这将是: DCBA-HGFE-LKJI-POMN-TSRQ-XWVU ^但他们会有不同于: 渔护署-EBGH-IJKL-MNOP-QRST-UVWX ……这是一个独特的组合。 所以只是重申:我正在试图弄清楚如何从24个项目中获得所有可能的组合,考虑到我需要将它们分成6组,每组4个。 此外,6组的排序也不重要。 含义:“ABCD-EFGH-IJKL-MNOP-QRST-UVWX”与“EFGH-IJKL-MNOP-QRST-UVWX-ABCD”相同 注意:在Java中实现这一点的帮助会很棒。 谢谢! 编辑: 解决方案如何: (1)我首先尝试找到所有可能的四个组,给出24个项目。 (2)然后我找到所有可能的六个组,给出由#1产生的组 思考?

整数数组算法的排列

有一组例如(1,4,2,5,7,6,9,8,3)。 我们通过以下方式计算其first difference (FD): firstDifference[i] = inputArray[i+1] – inputArray[i] 。 inputArray是原始集。 在示例中,情况是(1,4,2,5,7,6,9,8,3)。 firstDifference是通过以下方式从inputArray创建的:(inputArray的第二个元素) – (inputArray的第一个元素),依此类推。 所以给定集合的FD是(3,-2,3,2,-1,3,-1,-5)。 任务是找到给定集合的多个排列,其中第一个差异是FD的排列。 在示例中,我们应该找到(1,4,2,5,7,6,9,8,3)的这种排列,即第一个差异是(3,-2,3,2,-1,3, – 的排列)。 1,-5)。 这是我的算法: 找到给定集的所有排列。 找到给定集合的FD。 找出我们集合中排列的所有第一个差异。 仅选择这样的集合,其中第一个差异包含给定集合的FD的数量。 数数吧。 但是这个算法太慢了。 你能帮助创建更快的算法吗? 可能我做了一些可以消除的步骤?

打印出数组的所有排列

我正在研究一个程序,我有一个函数可以交换用户输入的长度数组中的位置。 但是,我想弄清楚如何打印出这个函数调用N! times,列出函数中的所有排列。 我的置换函数代码是: static void nextPerm(int[] A){ for( int i = (n-1); i > 0; i– ){ if( A[i] = A[i+1] ){ reverseArray(A); return; } } for( int i = n; i > 0; i–){ if( A[i] > pivot ){ A[i] = successor; continue; } } Swap(pivot, successor); int[] B = new int[pivot+1]; reverseArray(B); […]

我如何计算排列?

我对Java中的排列有疑问。 假设我在数组[a,b,c,d,e]中有五个不同的元素,我想从中选择三个元素,顺序很重要。 我知道在数学中我们可以使用5 P 3来得到答案,但是我们可以使用Java来获得计数以及5 P 3的置换集的元素的完整列表吗?

采用整数并返回所有可能的加法格式的算法

我需要编写一个采用整数的算法并返回所有可能的加法格式 例如 如果我得到:6 它将返回以下字符串: 0+6=6 1+1+1+1+1+1=6 1+1+1+1+2=6 1+1+1+3=6 1+1+4=6 1+5=6 2+1+1+1+1=6 2+1+1+2=6 2+1+3=6 2+4=6 3+1+1+1=6 3+1+2=6 3+3=6 4+1+1=6 4+2=6 5+1=6 6+0=6 这是我的尝试: import java.util.*; public class Test { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.print(“Enter an integer? “); int num = in.nextInt(); System.out.println(); calculate(num); } private static void calculate(int n) […]

java字符串排列和组合查找

我正在写一个Android word应用程序。 我的代码包含一个方法,可以找到字符串的所有组合和7字母字符串的子串,最小长度为3.然后将所有可用组合与字典中的每个单词进行比较,以找到所有有效单词。 我正在使用递归方法。 这是代码。 // Gets all the permutations of a string. void permuteString(String beginningString, String endingString) { if (endingString.length() = 0){ mWordSet.add(beginningString + endingString); } } else for (int i = 0; i 3){ for(int x = 0; x < s.length(); x++){ newString = removeCharAt(x, s); permuteString("", newString); subStrings(newString); } } } 上面的代码运行正常但是当我在Nexus上安装它时,我发现它运行得有点太慢了。 […]

给定n和k,返回第k个排列序列

集合[1,2,3,…,n]总共包含n! 独特的排列。 通过按顺序列出和标记所有排列,我们得到以下序列(即,对于n = 3): “123” “132” “213” “231” “312” “321”给定n和k,返回第k个排列序列。 例如,给定n = 3,k = 4,ans =“231”。 那里有多种解决方案。 但是它们都使用阶乘或者复杂度大于O(n),例如O(n!)。 如果你使用阶乘并在位置找到k /(n-1)!,那么当n很大(n = 100)时会出现问题。 这里n很大,(n-1)! 溢出并变为0.结果,我得到一个零除错误…任何解决方案或算法? 这是我的代码: public class KthPermutation { public String getPermutation(int n, int k) { // initialize all numbers ArrayList numberList = new ArrayList(); for (int i = 1; i <= n; i++) […]

查找给定数字集的所有组合

说我有一组数字’0’,’1’,’2’,……,’9’。 我想找到所有包含我的集合中每个数字的数字。 问题是:在我开始我的程序之前,我不知道我的设置将包括多少个数字和数字。 (例如,该集合可以包含数字’1’,’3’和’14’。) 我搜索了互联网,偶然发现了“动态编程”这个术语,这个术语显然是用来解决像我这样的问题,但我不明白这些例子。 有人可以给我一个如何解决这个问题的提示(可能是动态编程)吗? 编辑:当集合包括像’14’这样的数字时,集合的不同数量当然必须通过某种方式分开,例如当集合包括数字’1’,’3’和’14’时,组合可以类似于1-3-14或3-14-1(=由’ – ‘字符分隔的个别数字)。 编辑2: 这里描述了一个似乎有点类似的问题:其中一个解决方案使用动态编程。