数据结构算法的时间复杂度

x=n;
while(x>=(y+1)*(y+1))
y=y+1
求时间复杂度 要有详细的算法思想

按照分析惯例,假设所有单一运算的时间复杂度均为1

x=n; ......1
while(x>=(y+1)*(y+1)) ......4(两次加法、1次乘法、1次比较)
y=y+1 ......1

时间复杂度 = 1 + (4 + 1) x 循环次数

循环次数是由n和y的初始值决定的,假设循环次数为N,y的初始值为y0,y的结束状态为yn,有
x < (yn + 1)*(yn + 1) ......假设y的初始值为整数,则yn为满足该式的最小整数
N = (yn - y0) / 1 ......因为每次循环y的递增量为1
1式简化为 x = (yn + 1)*(yn + 1),可得:yn = n^(1/2) - 1
所以N = n^(1/2) - 1 - y0
采用大O表示法,仅考虑最高次项,则求N的复杂度为O(n^(1/2))

进而求得你这3行代码的
总体复杂度 = 1 + (4 + 1) x O(n^(1/2))

由于已知的常数项及非最高次项通常会被忽略(大O精神),所以总时间复杂度为O(n^(1/2))
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-03-08
************我谈**********************
“如果执行时间的算法不按照问题规模n的增加而增长,即使成千上万的语句的算法,其执行的时间,但也有大量的常数。该算法的时间复杂度是O(1)。“

不要明白这一点吗?

所以该算法是不是说多少单一的语言
温度=;
= J;

J =温度; />共三种语言中,和每个频率是1,且每个频率可以被认为是O(1),则T(n)的= O的(1)+ O(1)+ O(1)= O( 1)。

以下四个语句:
scanf的(“为%d”,&N);
= N;
(I = 0,<N我+ +)= I * 1(这也只能算是一个)

(I = 0,I <n * n的,我+ +)= I×1; (同上)
前两个栏的频率分别为
频率为N和N * N
(1)的总频率的所有
O. + O (1)+ O(N)+ O(N * N)= O(N * N)
(为什么这个等式的左边是等于右侧的O(N * N)??不要问我,我懒得说了,这是一个C / C + +的问题,这是一个数学问题,不明白自己看到的高等数学。)

声明,更多的是总是有限的,或一个单独的语句的频率最花时间

单个语句,比如for(){(){(){}}}而( 1){(){}}等等这样的,可以视为一个忘记

一份声明中可以执行了N年没有完成,如:F(I = 0; + +),除非你终止!!
第2个回答  2013-03-06
n^(1/2)-y0=O(N^(1/2))追问

能解释下吗

追答

每次循环O(1),所谓时间复复杂度就是某些基本操作的使用频率的大致统计,常数被忽略不计,比如总是10个除法不管n有多大这叫常量时间O(1)非常量时间和数据规模相关,这里基本操作是乘法比较和加1由于乘法最耗时,所以比较和加1被忽略,而这个乘法次数和n相关,所以数据规模好n,通常用N表示数据规模,所以这里的n就当成N了,一般排序之类的算法数组尺寸当作N,这个N只是一个习惯,也可以用别的字母替换,不过约定俗成的总是有道理的,我们自然就采用一般的做法了!!

第3个回答  2020-03-06
第4个回答  2013-03-06
sqrt(y)
相似回答