循环的大Theta符号和时间复杂度

时间:2017-07-17 07:29:26

标签: asymptotic-complexity big-theta

我被告知要创建一个基于循环的函数,它返回第n个Fibonacci数。我已经完成了这个功能,并将其包含在下面。我的任务是“争辩说函数的运行时间是Θ(n),即函数在n中是线性的。”在我读过的书和我看过的视频中,Big-Theta一直被写成Θ(g(n))并表示为一些不等式。在我们将其转入之前,教练拒绝回答任何有关此问题。

以下是我的两个问题:

1)我是否正确地说我的g(n)是5n + 7并且Θ(n)是线性的,因为g(n)是线性的?

2)即使此函数具有线性运行时间,我还需要担心上限和下限吗?

int fib(int n)
{
    int fib = 1;                                    //1
    int num1 = 0;                                   //1
    int num2 = 1;                                   //1

    for(int i = 0; i < n; i++)                      // 1 + (n+1) + 1
    {
            fib = num1 + num2;                      //2n
            num1 = num2;                            //1n
            num2= fib;                              //1n
    }
    return fib;                                     //1
}                                                   //----------------
                                                    //5n+7 <- runtime as a function of n

据我所知,没有上限或下限,因为运行时是线性的。

1 个答案:

答案 0 :(得分:1)

  

1)我是否正确地说我的g(n)是5n + 7并且Θ(n)是线性的,因为g(n)是线性的?

是的,有点儿。我不鼓励你永远命名某个stepOne(); function stepOne() { try { var buttons = document.querySelectorAll("button.ytd-topbar-menu-button-renderer"); buttons[0].click(); stepTwo(); } catch(error) { setTimeout(stepOne, 250); } } function stepTwo() { try { buttons = document.querySelectorAll("paper-item.ytd-account-settings"); buttons[0].click(); stepThree(); } catch(error) { setTimeout(stepTwo, 100); } } function stepThree() { try { buttons = document.querySelectorAll("paper-toggle-button.style-scope.ytd-account-settings"); buttons[0].click(); document.body.click(); } catch(error) { setTimeout(stepThree, 100); } } 因为理解编程语言不是数学函数的良好表示。您可以以递归方式对函数进行编程,并进行完全不同的分析,或者甚至不可能以您的方式进行。但是保持相同的事实是,您的算法始终满足g(n)并与O(n)成比例Θ(g(n))

要了解g(n) = nO(g(n))之间的区别,请查看此处:What is the difference between Θ(n) and O(n)?

  

2)即使此函数具有线性运行时间,我还需要担心上限和下限吗?

不,不。不在此算法中。 Fibonacci算法没有更好或更坏的情况,因此它总是以Θ(g(n))结束。请注意,我使用了Big-Theta而不是O-notation,因为您的运行时非常Θ(n)而不是最多 n