Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 字符串组合算法的复杂性(作为递归)_Java_Algorithm_Complexity Theory_Big O_Combinations - Fatal编程技术网

Java 字符串组合算法的复杂性(作为递归)

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

我有如下方法:

如何计算大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
(因为这是家庭作业,所以只需提示!)

你知道代码的作用了吗?对于给定的输入,它能产生多少输出

这必须是算法运行时间的下限,因为没有任何方法可以比必须生成的输出数量更快地运行。也许最简单的方法是查看各种输入的列表大小,并以此为基础。

以下是我的提示

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)

请用四个空格缩进代码。看一看,可能是重复的: