Java中查找置换的最有效方法[具有较低的渐近复杂性]
我的目标是找到字符串的所有排列。在快速搜索之后,我找到了一个简单的方法来查找字符串的所有排列。即Java中查找置换的最有效方法[具有较低的渐近复杂性],java,algorithm,Java,Algorithm,我的目标是找到字符串的所有排列。在快速搜索之后,我找到了一个简单的方法来查找字符串的所有排列。即 private static void permutation(String prefix, String str) { int n = str.length(); if (n == 0) System.out.println(prefix); else { for (
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));
}
}
私有静态无效置换(字符串前缀,字符串str)
{
int n=str.length();
如果(n==0)
System.out.println(前缀);
其他的
{
对于(int i=0;i
我相信这个方法的复杂性是O(n!)(如果我错了,请纠正我)。
我的问题是:
我可以再调整一下以提高效率吗?还是有更好的替代方案来生成所有排列?看起来您使用的是以下答案: 关于这个问题的评论内容丰富。在字符串操作方面有很多低效的地方,它打印重复的字符,不考虑重复的字符,还有一些其他的
我会仔细检查这些,实现建议的更改,然后比较看您的运行时改进是什么。从根本上说,我相信你是受n限制的!您所能做的最多就是调整内存/数据结构,以避免由于此处使用的结构应用效率低下而导致的空间/时间复杂性爆炸 可能重复的,除非有重复的字符,否则它将是O(n!)@dr_debug出于性能目的删除递归是什么意思?您是否建议使用循环而不是递归?