java - 计算我的程序的 Big O 复杂度

标签 java big-o

我的程序打印具有双字母的单词的所有排列 例如 在“Helloo”这个词中

结果将是: [嘿嘿,嘿嘿,你好,你好]

private List<String> doubleLetterPermute(String start, String ending, List<String> possibleWords) {
    String prev = "";
    for (int i = 0; i < ending.length(); i++) {
        String letter = String.valueOf(ending.charAt(i));
        // its a double letter
        if (letter.equals(prev)) {
            doubleLetterPermute(start + ending.substring(0, i), ending.substring(i + 1), possibleWords);
            doubleLetterPermute(start + ending.substring(0, i + 1), ending.substring(i + 1), possibleWords);
        }
        prev = letter;
    }
    possibleWords.add(start + ending);
    return possibleWords;
}

我不知道当递归函数出现时如何计算复杂度。 它循环 n 次,其中 n 是单词中的字符数,O(n),但我在每次出现双字母时拆分单词,那么它如何以大 O 表示法显示?

最佳答案

为了计算复杂性,您需要考虑最坏和最好的情况。

最多,你会得到一个长度为 N 且没有双字母的单词,比方说“abcde”。您的复杂性将为 O(n),因为您只有一个大小为 N 的循环。

在最坏的情况下,您会得到一个长度为 N 且具有相同字母的单词,例如“aaaaa”。在本例中,您有一个大小为 N 的循环,其中包含 2 个大小为 (N - i) 的循环。因此,复杂度为 O(2(n-i)*n) 或 O(n^2)。

关于java - 计算我的程序的 Big O 复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16155009/

相关文章:

java - 在请求正文中传递字符串时出现问题

big-o - T(n) = 2T(n-1) + O(N) 的递归关系和大 O 是什么?

java - 复杂性运行时间 LAB 和斐波那契数 (java)

language-agnostic - 位移是 O(1) 还是 O(n)?

java - 使用(Java编程)查找hadoop中的最大整数值

java正则表达式获取字符串和下一个管道之间的所有匹配

java - 我们如何将 REST api 与 Tally 集成?

java - JmDNS 设备移除检测

algorithm - 您如何确定该算法的平均情况复杂度?

algorithm - 这个 for 循环的运行时复杂度是多少?