代码之家  ›  专栏  ›  技术社区  ›  HansDampf

Java中数组的逆向排列

  •  0
  • HansDampf  · 技术社区  · 16 年前

    好吧,我的问题是:

    我正在用Java实现一个算法,其中一部分内容如下:

    鉴于: 整数数组置换,是[1..n]的置换

    现在我要排列数组a,使用数组排列决定的顺序,

    现在我想做一些关于置换的操作。。。

    现在我想做相反的置换运算。 这就是我不知道该怎么做的地方。 注意a可以多次保存一个项目,即a=[a,a,a,a]

    现在我认为使用Hashmap而不是perm数组会有所帮助。但我不确定这是不是最好的办法。

    4 回复  |  直到 16 年前
        1
  •  1
  •   Daniel Pryden    16 年前

    Python中的快速脏示例:

    def permute(a, perm):
        result = []
        for x in perm:
            result.append(a[x - 1])
        return result
    
    def invPermute(a, perm):
        result = [None] * len(perm) # Build a result list of correct length
        for i, x in enumerate(a):
            result[perm[i] - 1] = x
        return result
    

    测试方法:

    >>> perm = [2,3,4,1]
    >>> invPermute(permute("ABCD", perm), perm)
    ['A', 'B', 'C', 'D']
    
        2
  •  5
  •   djna    16 年前

    你的意思是

    ShuffledA[i] = a[perm[i]-1]
    

     inverseperm[perm[i]-1] = i + 1
    

    它构建了

     inversePerm[4 1 2 3]
    

    然后将现有的算法应用于[bc-da],得到原始的[ab-cd]

        3
  •  2
  •   mamboking    16 年前

    for (int i=0; i<a.length; i++) {
      String val = a[perm[i]-1];
    }
    
        4
  •  -1
  •   les2    16 年前

    Collections.shuffle(Arrays.asList(theArray));