数据结构:存储数据的不同的方式。
1数据每个格占用空间一样大,格子挨在一起 叫数组
插入新值:
如果要在一个数组中插入一个值,那就比较难,因为格子是没有空隙的。那怎么办呢,1.需要重新分配一个新单元格,比原来的要大,然后复制前后的数据,这个空间正好能装入要加入的值。
查询某个值:
根据单元格的所占大小(计算偏移量),可以直接就能定位到要找的数据
2每个格子里存着数据,还存着指向下一个小格子的指针,像一个链条,这样的方式叫做链表
插入新值:
如果有一个链表,需要在中间插一个新值,需要将原有的链条打断,然后和新值关联。这个就比较容易
等等
查询某个值:
必须通过链条一个一个往后找
算法:同一个问题的不同解决方法。
如何知道算法的优劣
时间测算
计算算法时间差 (可以在代码前后计算时间)
幅度不够循环来凑, (可以将这个代码循环10万次看时间)
空间测算
时间复杂度
大O标记法,大O就是来标识时间复杂度的,计算机执行的时间随着问题规模的扩大,时间变化的规律。
举例:
比如数组查第4个数组和查第40万的数组,他们都只是需要计算一下偏移量,规模扩大对其没有影响,都是固定的一个值,是个常数,那用
O(1)来表示
再比如 访问链表的第4个值和查第最后一个值(算时间复杂度,都是要考虑最差的情况)读一个是1s那读4个就需要4s
O(n) 线性扩大 一般会忽略常数项比如O(2n) 忽略成O(n)
求数组的平均数,时间复杂度是O(n) 因为需要把所有值加起来
两遍循环就是n的平方
三遍循环那就是n的立方
空间复杂度
随着问题规模的扩大,空间的变化规律