反转排列?

时间:2016-06-11 18:47:16

标签: java arrays permutation

有人请解释这个例子及其答案。我理解一个数组是否有{3,2,6},那么它的反函数将是{6,2,3}。这是被问到的,因为下面的代码片段似乎没有实现这个目标吗?

假设数组int pi [128]包含数字0,1,......,127的排列。

您将使用哪一行或两行Java代码来有效地生成逆代码 pi在阵列ip [128]?

答案:

 for (i=0; i<128; ++i) 
      ip[pi[i]] = i

5 个答案:

答案 0 :(得分:2)

不知道你在哪里看到了答案,因为这是错误的。

为了说明,我们使用大小为4的数组 使用ip = {1,2,3,0},结果为pi = {0,1,2,3}ip = {0,1,2,3}成为for (int i = 0; i < 128; ++i) ip[i] = pi[127 - i]; 不知道“逆”这个词的定义,那些将是正确的结果。

正确答案是:

public JSONObject[] jsonToArray() 

答案 1 :(得分:2)

答案是错误的(甚至不编译)。

ip数组将包含每个数字的索引,而不是“逆”。

在排列排序的情况下,结果数组将与输入相同:

int[] pi = {0, 1, 2, 3, 4};
int[] ip = new int[5];
for (int i = 0; i < 5; ++i)
    ip[pi[i]] = i;
System.out.println(Arrays.toString(ip));

输出:

[0, 1, 2, 3, 4]

无论“逆”是什么意思,我打赌它并不意味着“相同”。你的例子强烈暗示它意味着“逆转”,“答案”显然不会产生。

根据你的问题,恕我直言,你的教授缺乏知识,经验,并不是抽屉里最锋利的刀。我的建议是尽快找到另一位老师。

答案 2 :(得分:1)

跟进@Andreas的回答。您只需复制数组即可得到答案。我不知道如何调用它&#34;反转&#34;数组。我创建了一些根据问题设置数组的样本(使用更少的元素)并打印结果。

示例&#34;反转&#34;数组并打印结果

import java.util.Arrays;

public class HelloWorld{

     public static void main(String []args){
         int arrayLength = 10;
         int[] pi= new int[arrayLength];
         int[] ip = new int[arrayLength];
         int i =0;
         for (i=0; i<arrayLength; ++i) 
              pi[i] = i;

         for (i=0; i<arrayLength; ++i) 
              ip[pi[(arrayLength-1)-i]] = i;
         System.out.println("pi: "+Arrays.toString(pi));
         System.out.println("ip: "+Arrays.toString(ip));
    }
}

结果

  pi:[0,1,2,3,4,5,6,7,8,9]   ip:[9,8,7,6,5,4,3,2,1,0]

基于问题答案的示例

import java.util.Arrays;

public class HelloWorld{

     public static void main(String []args){
         int arrayLength = 10;
         int[] pi= new int[arrayLength];
         int[] ip = new int[arrayLength];
         int i =0;
         for (i=0; i<arrayLength; ++i) 
              pi[i] = i;

         for (i=0; i<arrayLength; ++i) 
              ip[pi[i]] = i;
         System.out.println("pi: "+Arrays.toString(pi));
         System.out.println("ip: "+Arrays.toString(ip));
    }
}

结果

  pi:[0,1,2,3,4,5,6,7,8,9]   ip:[0,1,2,3,4,5,6,7,8,9]

答案 3 :(得分:1)

这是排列$ \ pi $的“逆置换”,在任何数学家都会使用的意义上。 http://mathworld.wolfram.com/InversePermutation.html

答案 4 :(得分:0)

逆置换是一种置换,您可以通过将元素的位置插入数组中元素值指定的位置来获得。