Java 字符串组合算法的复杂性(作为递归)
我有如下方法: 如何计算大O O(2n)还是O(nn) 谢谢Java 字符串组合算法的复杂性(作为递归),java,algorithm,complexity-theory,big-o,combinations,Java,Algorithm,Complexity Theory,Big O,Combinations,我有如下方法: 如何计算大O O(2n)还是O(nn) 谢谢 公共静态无效组合(字符串str,int r) { int len=str.length(); 如果(len==r)myList.add(str); 如果(len==1)返回; 字符串newStr=null; 对于(int i=0;i
公共静态无效组合(字符串str,int r)
{
int len=str.length();
如果(len==r)myList.add(str);
如果(len==1)返回;
字符串newStr=null;
对于(int i=0;i
(因为这是家庭作业,所以只需提示!)
你知道代码的作用了吗?对于给定的输入,它能产生多少输出
这必须是算法运行时间的下限,因为没有任何方法可以比必须生成的输出数量更快地运行。也许最简单的方法是查看各种输入的列表大小,并以此为基础。以下是我的提示
int n = str.length();
试着将算法转换成一个方程,比如X(n+1)=函数(X(n)),然后求解方程 如果不能,请尝试初始情况X(1)=函数(X(0)),然后X(2)=函数(X(1)),等等。。。你会注意到一种模式(答案可能与O(2^n)或O(n^n)不同)
只是提示 对于不太复杂的场景,我使用计数器
public class Combination {
private static int count;
public static void main(String[] args) {
String[] inputs = new String[] {"12345", "1234", "123", "12", "1"};
for(String input : inputs){
count = 0;
System.out.print("output for " + input + " is:");
combination(input);
System.out.println("\nCount for input:" + input + " is " + count);
}
}
private static void combination(String input) {
combination("", input);
}
private static void combination(String prefix, String input) {
System.out.print(prefix + " ");
count++;
int n = input.length();
for(int i = 0; i < n; i++){
combination(prefix + input.charAt(i), input.substring(i + 1));
}
}
}
公共类组合{
私有静态整数计数;
公共静态void main(字符串[]args){
字符串[]输入=新字符串[]{“12345”、“1234”、“123”、“12”、“1”};
for(字符串输入:输入){
计数=0;
系统输出打印(“输入+输出为:”);
组合(输入);
System.out.println(“\n输入的计数:“+input+”是“+count”);
}
}
专用静态无效组合(字符串输入){
组合(“”,输入);
}
私有静态无效组合(字符串前缀、字符串输入){
系统输出打印(前缀+“”);
计数++;
int n=input.length();
对于(int i=0;i
解决方案确实是O(2^n)请用四个空格缩进代码。看一看,可能是重复的: