C语言题目:下面程序段的时间复杂度是?

秒采纳

第1个回答  2020-02-27
标准数值:√2n.
可以简化:√n.本回答被提问者采纳
第2个回答  2020-04-30
s的增长规律是1、3、6、10、15、21…
写成公式就是s=[i*(i+1)]/2<n,解得近似值是s<(2n)^0.5,即时间复杂度为O((2n)^0.5),时间复杂度可以适当往大了估计,选择题就选最接近的,选项值大一点也没关系
第3个回答  2020-02-27
为了计算这段代码的时间复杂度,我们应考虑循环被执行了几次,而判断循环执行的次数的关键,就在于判断s和i是如何增长的。
不难发现,每执行一次循环,i从0开始增加1。而s是对i的求和。
因此,不妨假设循环体已经执行了x次,则此时i = x - 1,s = 0 + 1 + 2 + 3 + ... + (x - 1)。
根据等差数列求和的性质,s = x (x - 1) / 2。当s > n时,即x (x - 1) / 2 > n时循环结束。
如果将(x - 1)近似成x的话,不难看出,x约等于√(2n)。
而循环体内的代码每执行一次的时间复杂度是Θ(1)的。
所以,这个代码段的时间复杂度为Θ(√n)。本回答被网友采纳
相似回答