Time complexity 关于时间复杂性示例的问题

Time complexity 关于时间复杂性示例的问题,time-complexity,Time Complexity,我是新程序员,最近在学习数据结构和算法。现在,我无法理解一个从极客到极客的时间复杂性示例,非常感谢您的建议 以下是链接: 我们可以参考上述链接中的第(1)和(2)部分 // 1st piece of code for (int i = 1; i <= c; i++) { // some O(1) expressions } // 2nd piece of code: and c is a constant for (int i =

我是新程序员,最近在学习数据结构和算法。现在,我无法理解一个从极客到极客的时间复杂性示例,非常感谢您的建议

以下是链接: 我们可以参考上述链接中的第(1)和(2)部分

   // 1st piece of code  
   for (int i = 1; i <= c; i++) {  
        // some O(1) expressions
   }

   // 2nd piece of code: and c is a constant  
   for (int i = 1; i <= n; i += c) {  
        // some O(1) expressions
   }

   for (int i = n; i > 0; i -= c) {
        // some O(1) expressions
   }

//第一段代码

对于(int i=1;i复杂度分析的底线是找到输入大小与给定输入的算法将执行的近似运算数之间的关系。您提供的链接使用大Oh,即算法运算数的上限。 总之,大Oh可定义为:

O(g(n)) = { f(n): there exist positive constants c and n0
          such that 0 ≤ f(n) ≤ cg(n) for all n ≥ n0 }
第一个循环以恒定的迭代次数执行,与输入大小无关。因此,f(n)-表示算法对大小为n的输入执行的操作数的函数-受一个常数的影响。因此,您可以找到另一个常数c,当乘以1(g(n))时,将导致值始终大于f(n)。在图表中,您将看到f(n)是一条水平线(它是一个常数,不随n变化)

另一方面,第二个循环取决于N的大小,因为它决定了循环何时结束。因此,您无法找到一个可以乘以1(g(N))的常数,因此它总是大于f(N)。例如,由于您的循环取决于N的大小,因此假设函数f(N)=N。如果您最初选择一个常数c(c=10),当n>=11时,f(n)>c.g(n),所以O(1)不适用。当然,你可以选择一个更大的c,但当n>c时,它就不适用了。使它起作用的唯一方法是至少有O(n)

关于这个问题,有一些很好的MOOC。例如: - -

有关该主题的可用MOOC列表: