在Java中找到排列的最有效方法[具有较低的渐近复杂度]

时间:2016-03-07 18:09:55

标签: java algorithm

我的目标是找到String的所有排列。经过一些快速搜索,我发现了一种简洁的方法来查找String的所有排列。即

    private static void permutation(String prefix, String str) 
    {
        int n = str.length();
        if (n == 0)
            System.out.println(prefix);
        else 
        {
            for (int i = 0; i < n; i++)
                permutation(prefix + str.charAt(i), str.substring(0, i) + str.substring(i+1, n));
        }
   }

我相信这种方法的复杂性是O(n!)(如果我错了,请纠正我)。 我的问题是: 我可以再调整一下以提高效率吗?或者是否有更好的替代方法来生成所有排列?

1 个答案:

答案 0 :(得分:0)

看起来你正在使用这个答案:

Generating all permutations of a given string

对该问题的评论非常有用。你有很多关于字符串操作的低效率,它打印重复,它没有考虑重复的字符,还有一些其他人注意到。

我会查看这些内容,实施建议的更改,然后进行比较,看看您的运行时改进是什么。从根本上说,我相信你受到了n的束缚!您可以做的最多是内存/数据结构调整,以避免由于此处使用的结构的低效应用而导致的空间/时间复杂性爆炸。