c - 关于代码时间复杂度计算的问题

标签 c performance algorithm big-o time-complexity

我知道所有符号(大 O 和小 o,大 Omega,小 omega )界限和一切。但我仍然是新手,我读了这段代码:

   void Function(int n)
    {  int i=1, s=1;
       while(s<=n) 
        { 
          i++;
          s=s+i;
          printf("*");
        }
     }

书上说运行时间是sqrt(n)或O(sqrt(n))。谁能帮我看看这是怎么回事?

最佳答案

在这个算法中,关键是计算while循环执行了多少次。我们称之为x。要找到 x,我们必须了解 sx 方面的表现。

变量s最多是序列前x项的总和(1、2、3...)。即:

s = x*(x+1)/2

现在我们必须了解 xn 方面的表现。即我们需要找到x,如:

x*(x+1)/2 <= n

x*x+x <= 2n

x <= 1/2 * (sqrt(8n+1)-1)

因此,给定一些n,循环将迭代O(1/2 * (sqrt(8n+1)-1)) = O( sqrt(n)) 次。

关于c - 关于代码时间复杂度计算的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27001811/

相关文章:

android - 缩放到高分辨率时绘制位图很慢

c# - 从流中读取数据的最有效方式

sql - PostgreSQL DELETE/INSERT 吞吐量问题

algorithm - 为什么 Merge Sort 的 Merge() 函数有条件第二个循环?

c - 使用asn.1生成源文件时c函数的多重定义

c - 如何在 glib 中设置日志级别

c - 读取标准输入时 scanf 的行为

c - 如何使 GCC 输出到标准输出?

algorithm - 如何分析算法的复杂度?

algorithm - 给定n个数字,找到最小周长三角形