1.时间复杂度:
是一个描述算法性能的函数,可以定性的描述算法的运行时间。是评价算法优劣的重要指标
2.快速找到第K个数
1).可以使用快排的思想,因为快排每次可以找到一个第i位置的数,并且小于i位置的数都比他小,大于i位置的数比他大,这样我们就可以通过k与i的比较缩减查找范围。(快速选择算法)
2).可以使用小/大顶堆,只需要出k次堆就可以得到结果
3.p类和NP类问题
用确定的图灵机以多项式时间界可解的问题称为P类问题;用不确定的图灵机以多项式时间界可解的问题称为NP类问题
4.解释下快排为什么快?
因为时间局部性和空间局部性,cache比主存快,读入一个数据时,会把它周围内存地址的数据存入cache,下次访问直接就访问cache了,而快排又经常访问相邻元素,所以比较快。(速度cpu>寄存器>高速缓存>内存>外存)
5.数组没有标号,怎么判断最中间的元素
如果是有序数据可以使用快慢指针的方法,如果是无序数据快速选择算法(快速排序的思路)先找到第k小的数据然后再判断k与长度//2比较
6.广义表
广义表是线性表的补充。广义表是递归定义的,广义表的元素既可以是单个元素,也可以是一个广义表。
广义表的第一个元素是表头,其余部分是表尾。有点类似于Python中的列表,Python中列表可以存储多种数据。

7.寻找素数
埃及筛适用于数据范围在10^6 内的数据,但数值范围可以很大,当数值范围很大时,我们需要分块筛,即先筛10^6 内的数据,然后去筛我们要的数据范围的数据。即通过10^6 数值范围筛10^6 区间范围数据。(可以看成是区间筛法)
8.线索二叉树
就是在二叉树的基础上,为每个节点加上线索,使用线索代替了递归/栈,使得整体的遍历速度变得更快
9.二叉树和度为2的数的区别
二叉树的特点
每个节点最多只有两棵子树
二叉树的区别左右子树的,及时只有一棵子树
二叉树可以为空,可以没有子树,也可以只有左右子树,或左右子树都存在。
10.二叉平衡树
在二叉排序树的基础上保证左右子树高度差不超过1,适用于查找多,插入删除比较少的
11.二叉搜索树
实际就是二叉排序树,其左子树所有数据<=根节点数据,右子树所有数据>=根节点数据,并且左右子树也是二叉搜索树。当使用中序遍历时,可以得到排序的数据
12.红黑树
优点:平均查找,添加输出效果都不错
应用于存储有序的数据,0(n),c++中set,map,使用动态规则的防火墙系统都是使用的红黑树而不是散列表(哈希表)。linux内核管理虚拟内存也是采用红黑树来维护内存块
13.图
有向图和无向图,有向图算法:拓扑排序,最短路(dijkstra,floyd)
无向图算法:最小生成树 (prim,kruska算法),dfs,bfs
14.图的存储结构邻接表和邻接矩阵
邻接表适用于稀疏图(链式存储),邻接矩阵适用于稠密图(顺序存储)
稀疏图还可以使用三元组顺序表(行标,列标,数值)缺点是插入和删除时需要移动位置,比较耗时。
十字链表法
十字链表法使用两个指针域,一个指向所在列的下一个元素,一个指向所在行的下一个元素。(一个存各行的头指针,一个存各列的头指针)
多重链表法
链表中的节点可能属于多个链,多重链表中节点的指针域会有多个,但是包含多个指针域的链表不一定是多重链表如:双向链表
15.数组元素是保存在栈中还是堆中
数组元素存储在堆中,数组引用变量是引用类型的变量,存储在栈内存中(即只是保存数组变量的地址)。有点类似于pc寄存器,取出的是地址,如果需要具体值则需要再次访问内存(堆内存)
16.dfs,bfs
dfs类似于二叉树的先序,中序,后序遍历使用栈(系统栈(栈内存),和自定义栈(堆内存))
bfs类似于二叉树的层次遍历使用队列
17.最小生成树唯一
当边权值都不相同,或者权值有相同的但是都加入了最后的生成树中
18.最短路
dijkstra只能处理非负权边的图,spfa(如果第一次扫描到就加入队列。每次更新所有已扫描且未访问的节点的距离)
19.拓扑排序
AOV网络:顶点表示活动,边表示先后顺序且没有回路的有向图。可以反映出整个工程中各个活动之间的先后关系的有向图。
功能:1.判断是否有环2.得到活动的先后顺序,排序结果为前序节点不依赖于后序节点。
20.AOV和AOE网络的区别
他们都是有向无环图
AOV活动在节点,边没有权值,只是代表先后关系
AOE活动在边,边有权值,代表活动持续的时间
21.排序算法
希尔排序属于插入排序
比较类排序:冒泡,选择,插入,希尔,快排,归并,堆排序
非比较类:基数,计数,桶排序(都是使用空间换时间)
22.查找方法:
静态查找:顺序,折半查找,分块查找
动态查找:二叉排序树和平衡树
23.贪心和动态规划

24.动态规划与分治
他们都具有最有子结构,并且都是将问题拆分为若干子问题。
但区别在于动态规划从下往上,分治从上往下。
分治从上到下,没有保存状态会重复计算。而动态规划保存状态,避免了重复计算,性能比较好