数据结构概述
线性结构: 这是最常用的数据结构,特点是数据元素之间是一对一的线性关系。体现为数组、队列(先进先出)、链表(单、双、环形)、栈(先进后出)等。
单链表 指向后一个节点、双链表指向前后两个节点;
线性结构有两种不同的存储结构:顺序存储结构、链式存储结构
顺序存储 连续的存储空间、 查找快,删除插入慢
链式存储 不一定连续、删除插入块、查找慢
总结:数据量小的时候首选顺序存储结构,比如ArrayList,数据量大且插入、删除频繁时选用链式存储结构,比如LinkedList。
非线性结构: 数据元素之间不是一对一的线性关系。体现为二维数组、多维数组广义表、树结构、图结构等。
算法基础知识
算法:解决问题的方法和步骤
评价算法的好坏:渐近时间复杂度和渐近空间复杂度。
时间复杂度
时间频度---T(n)---基本语句执行的重复次数
时间复杂度--忽略常数项、忽略低次项、忽略系数
忽略常数项: n +20 忽略20 、
忽略低次项 :n*n + 2n 忽略2n
忽略系数 : 3n*n 和5 n*n 3和5忽略;
执行曲线分离 n*n*n 和6*n*n
算法的渐进时间复杂度 O(n) O(n*n)
渐近时间复杂度的大O标记:
- 常量时间复杂度 - 布隆过滤器 / 哈希存储
- 对数时间复杂度 - 折半查找(二分查找)
- 线性时间复杂度 - 顺序查找 / 桶排序
- 对数线性时间复杂度 - 高级排序算法(归并排序、快速排序)
- 平方时间复杂度 - 简单排序算法(选择排序、插入排序、冒泡排序)
- 立方时间复杂度 - Floyd算法 / 矩阵乘法运算
- 几何级数时间复杂度 - 汉诺塔
- 阶乘时间复杂度 - 旅行经销商问题
9) O(n!)
概念解释:
b = n^a a叫已n为底的b的对数
log(a)(b)=n a是底数、b是真数 n是对数;
log2N --->log24 =2 log28 =3 3是以为2底的8的对数;
while循环每次*2 log2N *3 log3N