【数据结构】复杂度与线性表

复杂度与线性表

1.复杂度(Complexity)

衡量算法好坏的的时候,两个主要维度(时间|空间)

复杂度衡量算法好坏的一个尺度/标准

1)时间复杂度(重点)

2)空间复杂度

2.时间复杂度

第一反应:算法的运行时间

因为运行环境的不确定,所以,直接拿运行时间去衡量不合理

CPU主频    单位时间内,运行的指令个数

CPU每秒运行的指令个数是不变的

考察算法的运行时间------>考察算法运行需要的指令个数

算法运行的指令个数和因素(数据规模 n)有关系

冒泡排序(10/10000)

指令个数=F(n)

所以:

1.时间复杂度,求F(n)

大O渐进表示法(不求甚解的过程)

1)只保留最高次项

2)最高次的项的项数化为1

O(F(N))=O(N^2)

3.算法有多种情况需要考察

最好 平均 最坏

O(1) O(n) O(n)

二分查找:

1)最坏情况没找到

上次:区间内 1个数

再上 2个数

再上 4个数

时间复杂度 O(log(n));(一般默认为2为底)

常见的时间复杂度:O(1), O(log(n)), O(n), O(n*log(n)), O(n^2)

递归函数求阶乘:O(n)

递归斐波那契数:O(2^n)(时间复杂度就是计算结点个数,利用不求甚解的过程)

结论:如果一个算法是O(2^n),基本没有用

3.空间复杂度

算法执行过程中,占用的额外空间和数据规模n的关系的大O渐进表示法

开辟空间;

1)栈上的局部变量/形参

2)对上的对象(数组、其他对象)

3)如果是递归方法,考虑调用栈的占用情况

总结:复杂度(不求甚解即估算)

衡量算法好坏刻度,有两个维度

时间复杂度:通过算法的指令个数衡量

空间复杂度

大O渐进法 1.最高次保留2.系数=1

 

线性表

1.线性结构

2.树形结构

3.图形结构(不讲)

4.排序

 

 

1.线性结构

1)数据逻辑上有连续性,物理存储上也有连续性 顺序表

2)………………………,物理存储上不一定连续 链表

顺序表:

创建/销毁

*增/*删/查/改

访问第n个元素的时候,时间复杂度要求O(1)

增:头插/尾插/中间插入(给定下标)

删:头删/尾删/中间删除(给定下标)

查:indexOf(element)

改:set(int index,int value)

访问:get (int index)

array[空间的下标]=array[数据的下标]

2.扩容:

1)扩容的条件:在插入之前,size==array.length;

2)如何扩容(搬家)

(1)申请新房子(1.5倍-2倍) java中通常1.5倍

(2)把东西都搬过去

(3)朋友圈通知自己的新家

(4)把旧的房子推掉

3)所有插入都需要考虑扩容

时间复杂度

头插、头删、中间插入、中间删除     O(n)

尾插 平均 O(1)  均摊 O(1)

尾删 O(1)

会触发扩容的条件 O(n)

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值