对于下面提到的字符串排列算法或任何其他递归算法,如果我有 1 GB 的专用内存可用,支持的最大字符串大小是多少。
public void permutate(String prefix, String word){
if(word.length() <= 1){
System.out.println(prefix + word);
} else{
for (int i = 0; i < word.length(); i++) {
String temp = word.substring(0,i) + word.substring(i+1);
permutate(prefix + word.charAt(i), temp);
}
}
}
public void permutate(String word){
permutate("", word);
}
好吧,你的内存复杂度O(N^2)(N是单词的长度),所以对于1 GB,我会说你可以很好地处理大约16000个字符的单词(16000^2 * 4字节大约等于1 GB)。
然而,从时间的角度来看,一个大约 100 个字符的单词可能需要几天的时间来计算,而一个 1000 个字符的单词可能需要几个月甚至几年的时间。无论如何,如果您为一个包含 16000 个字符的单词运行此算法,您可能永远不会看到它的结尾。