数据结构,划线语句的时间复杂度为什么是n²,感谢 数据结构中复杂度

7619℃ ROLAND

数据结构,划线语句的时间复杂度为什么是n²,感谢数据结构中复杂度

数据结构 时间复杂度

频度是语句执行的次数.

就本题来分析:

i=1时,@执行1次.

i=2时,@执行1+2次

i=3时,@执行1+2+3次.

i=4时,@执行1+2+3+4次.

...

i=n时,@执行1+2+3+...+n次

所以当i从1到n时总共执行了1+(1+2)+(1+2+3)+...+(1+2+3+...+n)次

即n(n + 1)(n +2)/6

即n³/6 + n²/2 + n/3

频度就是n³/6 + n²/2 + n/3

时间复杂度是:O(n³)

数据结构中算法的时间复杂度是什么?

程序所用时间关于数据规模的函数

比如:

给n个数排序需要n^2的时间

时间复杂度就是O(n^2)

通常有

O(2) 常数 与输入数据规模无关

O(n) 成正比

O(log2n) 平方与数据规模成正比

O(n^2) 与数据规模的平方成正比

O(n^3) ……三次方……

O(n!) 阶乘

数据结构中算法的时间复杂度怎么理解?

就是基本操作语句执行的次数

如果你能确定基本执行语句,那就可以假设需要执行的次数是N,然后根据程序的控制部分得到关于N的一个函数,就可以求的了。

int int=3;

do{

i*=3;

)while(i<100);

那么我们可以这样立即,就是i*=3是基本语句,do~while是控制结构,在控制结构下,要保证

i*=3执行N此后,能使得最后i<100退出控制结构。

那么你去算吧,对于i来说,每次都是乘以3,那执行N次,就相当于乘了n个3,然后满足了<100、因此可以组成一个函数 就是3的n次方<100那你解方程来求N

就得了。

不过时间复杂度用渐进函数表示的。

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

按照分析惯例,假设所有单一运算的时间复杂度均为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))