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

时间:2011-05-06 20:57:08

标签: java algorithm complexity-theory big-o combinations

我有以下方法:

如何计算Big-O?

O(2 n )或O(n n )??

感谢。

public static void combination(String str, int r) 
{

    int len = str.length();

    if (len == r) myList.add(str);
    if (len == 1) return;

    String newStr = null;
    for (int i = 0; i < len; i++) {
        newStr = str.substring(0, i) + str.substring(i + 1);
        combination(newStr, r);
    }
}

4 个答案:

答案 0 :(得分:1)

(因为这是家庭作业,只是提示!)

你有没有弄清楚代码的用途?给定输入产生多少输出?

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

答案 1 :(得分:1)

这是我的提示。

int n = str.length();

答案 2 :(得分:1)

尝试将算法转换为等式,如X(n + 1)=函数(X(n))并解析等式。

如果你不能,试试初始情况X(1)=函数(X(0)),然后X(2)=函数(X(1))等...你会注意到一个模式(可能答案与O(2 ^ n)或O(n ^ n)不同。

提示!!!

答案 3 :(得分:0)

对于不那么复杂的情况,我使用counter。

textarea

解决方案确实是O(2 ^ n)