数据结构 顺序表 时间复杂度

线性关系
1.顺序表:
数据逻辑有连续性,物理存储上也具有连续性 (中间不能空,要紧紧相连这点和数组区别)
2.链表:
数据逻辑有连续性,物理存储上不一定具有连续性
3.顺序表:
创建/销毁
增删查改
增:头插/尾插/插入(给定下标)
删:头删/尾删/删除(给定下标)
查:indexOf(element);
改:set(int index,int value);
访问 get(int index);
访问第n个元素,时间复杂度要求O(1),

头插:(size为数据个数,数组为array)
a.需要从后往前遍历,否则数据将会被覆盖
b.数据下标遍历范围[size-1,0] (也就是插入之前的范围)
c.空间下标遍历范围[size,1] (也就是遍历之后的范围)
d.搬移的过程 array[空间]=array[数据]
e.空间的下标=数据的下标+1
4.扩容
a.扩容的条件
在插入之前,size==array.length;
b.如何扩容
1.申请新房子 (1.5倍-2倍)
2.把东西搬过去
3.公布自己的新房子
4.把旧的房子推掉
c.哪些方法需要考虑扩容 所有插入
5.时间复杂度
头插/头删/中间插入/中间删除 O(n)
尾插 平均O(1) (因为过一阵子就会需要扩容)
尾删 O(1)
6.属性的初始化
普通属性:(发生在构造每一个对象时)
1.定义时初始化
2.构造方法中初始化
3.构造代码块时初始化
静态属性:(发生在类加载时)
1.定义时初始化
2.静态代码块初始化
7.复杂度
衡量算法好坏的刻度尺/标杆
时间复杂度|空间复杂度
计算数据规模n和执行基本指令的个数F(n)的关系
时间复杂度:
第一反应:算法的运行时间
因为运行环境的不确定,所以,直接拿运行时间去衡量不合理。
考察算法的运行时间----考察算法运行需要的指令个数
算法运行的指令个数和因素(数据规模n)有关系 指令个数=F(n)
考察算法的复杂度,一般来说,只关注最坏的情况
大O渐进表示
1.保留最高次项
2.系数为1
空间复杂度:
算法执行过程中,占用的额外空间和数据规模n的关系的大O渐进表示法
开辟空间:
1.栈上的局部变量/形参
2.堆上的对象(数组,其他对象)
3.如果是递归方法,考虑调用栈的占用情况
常见的复杂度
O(1) O(log(n)) O(n) O(n*log(n)) O(n^2)
(递归方法画调用栈去推算时间复杂度)
二分查找 (包含完全二叉树)O(log(n))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值