0
点赞
收藏
分享

微信扫一扫

软件设计师 上午题#3 数据结构 时间复杂度

zhongjh 2022-04-13 阅读 55
数据结构

目录

1、常数阶

2、对数阶

3、线性阶

4、线性对数阶

5、平方阶

6、立方阶

习题巩固


1、常数阶

这个是跟问题规模没有关系的,不会随着n增大而执行次数增多

比如这种简单的变量赋值

2、对数阶

这个是对数阶是因为,首先公式 i = i * 2 可以带入几个数进去,且定义的是从i开始,那么我们就可以得出:

i = 1,2,4,8,16...,n

可以看出,这里就是2的倍数关系是吧。就是

所以这里要求的就是第几次的x对吧,或者说是执行多少次x

根据对数的公式:

 ==> 

         

        不过算出来公式 i = i * 2 的执行次数之后,还有while(i <= n)的执行次数跟上面的 int i =1的执行次数对吧

        首先 i = i * 2 要跳出循环,怎么跳?当然就是 执行完 x = 再+1 那 i 不就大于while(i <= n)里的n了吗?所以 i = i * 2执行的次数是

        如果不知道我说什么你可以试试代一个数进去,比如我代入 n=8,那么 x =3对不对?那这里还没有跳出循环啊,所以再执行一次,x = 4 的时候才算数跳出循环,所以就是要 + 1 

        然后就到我们的循环while(i <= n)这里,外循环执行的次数,跟循环体执行的次数一样这个没有问题吧?但是!这里还有搞清楚一个问题,就是我们比如我们的 i > n 之后,是直接执行到下一步吗?当然不是,我们还得再判断一次 i 是不是真的大于n 对吧。所以就是

还有一个 int i = 1; 这里只执行一次,接下来再根据加法规则:多项相加,保留最高阶,并将系数化为1。

3、线性阶

int x = 1;跟 int i = 1; 都是只执行一次。

然后把 for 循环跟他的循环体分成4部分

x ++; 执行的次数为 n,不懂就带入数字自己算一遍

i <= n 的次数就是比循环体多一次,因为 i > n 之后再判断一次 i 是不是真的大于n

 i ++ 的次数也是n,不懂就自己带入数字自己算一遍

那么加法法则

4、线性对数阶

while(x <=n){x = x * 2}这里时间复杂度已经知道是

然后for循环我们也知道他的时间复杂度是O(n)

         不过这里不一样的就是我们的这个循环是嵌套的,外面for循环每执行一次,里面while就需要执行次。那么外面执行了n次的话,里面就是执行了这么多次。

所以根据我们的乘法规则多项相乘都保留,并将系数都化为1

不过别忘了还有for循环的时间复杂度,再根据加法乘法混合规则,那么时间法则度就为 

5、平方阶

 原理跟线性对数阶是一样的,只不过是for套for,外面for循环时间复杂度为O(n),里面的时间复杂度是外面的for循环执行一次,里面就执行O(n)次,外面执行O(n)次里面就执行O(n²)次(O(n)*O(n)=O(n²));

所以根据加法乘法混合规则:T(n)=1+O(n)+O(n²)=O(n²),时间复杂度就是O(n²)

1是int x=1;的次数

6、立方阶

 原理也是跟线性对数阶,平方阶一样的,这里我就不多赘述了,第一次for执行一次,第二层for就执行O(n)次,第三层就执行O(n²)次;第一次for执行n次,第二层for就执行O(n²)次,第三层就执行O(n³)次

根据加法乘法混合规则:T(n)=1+O(n)+O(n²)+O(n³)=O(n³)

习题巩固

例题1、

 解析:直接根据加法乘法混合规则,

加法规则:多项相加,保留最高阶,并将系数化为1。

乘法规则多项相乘都保留,并将系数都化为1

最高阶是是O(n²)时间复杂度为T(n)=O(n²)

例题2、

 解析:这里渐进分析可以看成时间复杂度,根据

可知,这里面最高的是阶乘阶,然后再到指数阶,对数阶lgn最小,直接选D

举报

相关推荐

0 条评论