线性表算法时间复杂度的一些小知识

算法时间复杂度定义

在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,记作:T(n)=O(f(n))。f(n)是问题规模n的某个函数。
推导大O阶方法----简而言之,只有常数项则为1,否则则只保留最高阶,比如n2;n3

常见例子

举个例子:for(int i=0;i<n;i++){ System.out.println(i); }在{}内部是时间复杂度为O(1)的程序,整段代码的时间复杂度为O(n),因为循环体代码需要执行n次。int count=1; while (count<n){ count=count*2; //时间复杂度为O(1)的程序 }
由于每次count*2以后,就距离n更近了一步,也就是说,有多少个2相乘后大于n,则退出循环。由于2x=n,得到x=log(2底)n。所以这个循环时间复杂度为O(log n)。
相应的易得,二维数组遍历则为O(n2)
常用的时间算法复杂度
1< log(2底)n < n < n * Log n < n2 < n3 < 2n <n!
从 n3 开始,过大的n都会使得结果变得不现实,所以一般不去讨论。

线性表有顺序存储结构和链式存储结构
Java中顺序存储类似数组,直接通过下标定位查找元素(不太严谨,方便理解),所以查询元素的时间复杂度为O(1)。插入或删除因为其他元素需要相应挪动(插入最后是最好情况,这里指的是平均情况),平均移动次数为(n-1)/2;所以平均算法时间复杂度为O(n)。
链式存储结构因为没有C语言的指针,所以由一个存储后继节点的游标代替,查找元素需要通过每个节点依次查询,算法时间复杂度为O(n),插入或者删除,也需要先确定位置,所以时间复杂度为O(n),但是之后再次重复插入删除时,则不需要重复定位了,时间复杂度则变为了O(1)。

单链表结构和顺序存储结构简单对比

在这里插入图片描述

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值