【问题标题】:Big O of functionF函数 F 的大 O
【发布时间】:2020-11-25 15:41:26
【问题描述】:
static void functionF(int n) {
     for (int i = 0; i < n; i++) {
             functionF(n-1);
     }
}

我计算过:

如果 n = 2,则函数会再调用 4 次。如果 n = 3,它会再被调用 15 次。如果 n = 4,它会再被调用 64 次。我正在尝试计算一个很大的 O 时间复杂度。

【问题讨论】:

    标签: java recursion runtime big-o complexity-theory


    【解决方案1】:

    从复杂度来看,需要阶乘时间才能完成 -> O(n!)

    因为每一步都会运行上一步中指定的次数。 并注意您的功能与:

    function alpha(n){
        for(int i = 0; i < n; n++){
            //Do some stuff
            alpha(i)
        }
    }
    

    function alpha(n){
        for(int i = 0; i < n; i++){
            for(int j = 0; j < n; j++){
                // Do some stuff
            }
        }
    }
    

    第一个我猜不出它的时间,但低于 O(n!) 第二个是简单的 O(n²),在任何实际情况下运行速度都比 O(n!) 快

    【讨论】:

      【解决方案2】:

      通过每次调用函数时增加一个公共静态变量来测试此函数。如果您想检查某事执行了多少次,您可以在以后执行此操作。

      以 (1, 4, 15, 64, 325, ...) 开头的模式是:

      a(n) = n(a(n-1) + 1)
      

      a(n) = n(a(n-1)) + n
      

      这是一个很奇怪的函数,因为它具有递归特性。然而,它是准确的。您也可以根据您提供的数字搜索此模式。

      【讨论】:

        猜你喜欢
        • 2021-04-24
        • 2021-06-03
        • 1970-01-01
        • 1970-01-01
        • 2011-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多