数据结构
1.时间复杂度 时间复杂度是指执行算法所需要的计算工作量,
2. 循环队列的顺序表中,为什么要空一个位置? 这是为了用来区分队空与队满的情况。如果不空一个位置,则判断队空和队满的条件是一样的。
3.什么是二叉排序树?以及它的原理,算法。(二叉排序树的查找过程) 二叉排序树又称二叉查找树,它或者是一颗空树,或者满足一下性质的二叉树:
① 若左子树不空,则左子树上所有结点的值均小于根节点的值;
② 若右子树不空,则右子树上所有结点的值均大于根节点的值;
③ 左右子树也分别是二叉排序树。
原理步骤: 若根结点的关键字值等于查找的关键字,成功。 否则,若小于根结点的关键字值,递归查左子树。 若大于根结点的关键字值,递归查右子树。 若子树为空,查找不成功。
4.哈夫曼树 定义: 给定 n 个权值作为 n 个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二 叉树,也称为哈夫曼树(Huffman tree)。 构造方法: 假设有 n 个权值,则构造出的哈夫曼树有 n 个叶子结点。 n 个权值分别设为 w1、w2、…、wn,则哈夫 曼树的构造规则为: (1) 将 w1、w2、…,wn 看成是有 n 棵树的森林(每棵树仅有一个结点); (2) 在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左、右子树,且新树的根结点权值为其 左、右子树根结点权值之和; (3)从森林中删除选取的两棵树,并将新树加入森林; (4)重复(2)、(3)步,直到森林中只剩一棵树为止,该树即为所求得的哈夫曼树。
特点: ① 权值越大的结点,距离根节点越近; ② 树中没有度为一的结点。
应用: 哈夫曼编码,减少编码的长度。哈夫曼编码就是长度最短的前缀编码。
5. 什么是哈希冲突?以及如何解决。 散列(哈希)表: 根据关键码值(Key value)而直接进行访问的数据结构。根据给定的关键字来计算出关键字在表中的地址,加快查找的速度。 冲突:指的是多个关键字映射同一个地址的情况。 解决办法:
(1) 开放定址法 ① 线性探查法(产生堆积问题); ② 平方探查法(不能探查到哈希表上所有的地址,但至少能探查到一半的地址)
(2) 链地址法 把所有的同义词用单链表连接起来。
补充(常见的哈希函数构造方法),除留余数法, 直接定址法,数字分析法,平方取中法6. 深度优先搜索遍历和广度优先搜索遍历的过程 深度优先搜索遍历
基本思想:首先访问出发点 V,并将其标记为已访问;然后选取与 V 邻接的未被访问的邻接顶点 W,访问 W;再选取与 W 邻接的未被访问的顶点访问,以此类推。当一个顶点所有的邻接顶点都被访问过时,则依 次退回最近被访问过的顶点,若该顶点还有其他邻接顶点未被访问,则从这些顶点中去一个顶点进行上述 的过程,直至图中所有顶点都被访问过为止。 广度优先搜索遍历 基本思想:首先访问起始顶点 V,然后选取与 V 邻接的全部顶点 w1,w2,….,wn 进行访问,再一次访 问与 w1,w2,… ,wn 邻接的全部顶点(不包括已访问过的顶点),以此类推,直至所有顶点都被访问过为止。
6. 迪杰斯特拉算法的过程 该算法可以求得某一顶点到其余各顶点的最短路径。 算法思想:设有两个顶点集合 S 和 T,其中集合 S 中存放的是图中已找到最短路径的顶点,集合 T 中存放 的是图中的剩余顶点。 初始状态时,集合 S 中只包含源点 V0,然后不断从集合 T 中选取到顶点 V0 路径最短的顶点 Vu 并加入集 合 S 中。集合 S 每加入一个新的顶点 Vu,都要修改 V0 到集合 T 中各个顶点的最短路径的长度值。不断重 复这个过程,直至集合 T 中的顶点全部并入到 S 中为止。
7. 链表查找某个元素,平均的时间复杂度是多少?
O(n) 链表是顺序存储,故(1+n)/2。
8. 图的存储方式
① 邻接矩阵:是图的顺序存储结构,用两个数组分别存储数据元素(顶点)信息和数据元 素之间的关系(边/弧)的信息。图的邻接矩阵表示是唯一的,无向图的邻接矩阵是对称 的。
② 邻接表:是图的链式存储结构,由单链表的表头形成的顶点表和单链表其余结点所形成 的边表两部分组成。
③ 十字链表:有向图的另一种链式存储结构。
④ 邻接多重表:无向图的链式存储结构。
9.. 图的深度遍历是否唯一 不一定是不唯一。我们可以取图中任一顶点进行深度遍历。 11. 图的相关概念 图:由结点的有穷集合 V 和边的集合 E 组成。
类别:有向图和无向图。 顶点的度:出度和入度。
有向完全图和无向完全图: 若有向图有 n 个顶点,则最多有 n(n-1)条边,则称为有向完全图; 若无向图有 n 个顶点,则最多有 n(n-1)/2 条边,则称为无向完全图。
路径:相邻顶点序偶所构成的序列。
简单路径:序列中的顶点和路径不重复出现的路径。
回路:路径中第一个顶点和最后一个顶点相同的路径。
连通: 无向图中,如果 Vi 到 Vj 有路径,则称这两个顶点连通。如果图中任意两个顶点之间都连通,则 称改图为连通图。 有向图中,如果 Vi 到 Vj 有路径,则称这两个顶点连通。如果图中每一对顶点 Vi 和 Vj,从 Vi 到 Vj 和 Vj 到 Vi 都有路径,则称改图为强连通图。
10. 最小生成树的概念 一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持 图联通的最少的边。如果在最小生成树中添加一条边,必定成一个环。 相关算法: ① 普里姆算法 ② 克鲁斯卡尔算法
N 个结点的最小生成树有几个结点,几条边:n 个结点,n-1 条边。 1
11. 平衡二叉树 平衡二叉树又称 AVL 树,是一种特殊的二叉排序树,其左右子树都是平衡二叉树,且左右子树的高度差的 绝对值不超过 1.
平衡因子: 左子树高度减去右子树高度的差。
平衡调整: 先找到失去平衡的最小子树,即以距离插入结点最近,且平衡因子绝对值大于 1 的结点最 为根节点的子树,分为 LL,LR,RL,RR 四中调节方式。
12. 二叉树的存储
① 顺序存储结构:用一个数组来存储一颗二叉树,二叉树中的结点值按照编号依次存入一个一维数组中。 适用于完全二叉树,若用于一般的二叉树则会浪 费大量 存储空间。
② 链式存储结构:二叉树中的每一个结点用一个链结点来存放。
14. 折半查找,又称二分查找,基本思路: 在当前的查找区间[low…high]中,首先确定 mid=(low+high)/2,然后拿关键字与 mid 比较,若相等则查 找成功,返回该位置,否则确定新的查找区间, mid>K,[low…mid-1] mid
直至查找自区间长度小于 1 时查找结束。
适用范围:顺序结构存储并按照关键字大小有序排列。 时间复杂度:O(log2N)
15. 完全二叉树 若一棵二叉树至多只有最下面的两层上的结点的度数可以小于 2,并且最下层上的结点都集中在该层最左 边的若干位置上,则此二叉树成为完全二叉树。
完全二叉树特点: 叶子结点只可能在最大的两层上出现, 对任意结点, 若其右分支下的子孙最大层次为 L,则其左分支下的 子孙的最大层次必为 L 或 L+1;
16. 什么是堆?有什么作用? 堆是一种数据结构,可以把堆看成一个完全二叉树,并且这个完全二叉树满足: 父节点的值大于子节点的值,则为大顶堆
作用:应用于堆排序。
17. 如何实现循环队列?有何好处?
如何实现:把数组弄成一个环,让 rear 和 front 指针沿着环走,这样就可以产生循环队列。
好处:循环队列是顺序队列的改进,在顺序队列中,在元素进队的时候,rear 要向后移动,元素出队的时 候,front 也要向后移动,这样经过一系列的出队和入队操作之后,两个指针最后会达到数组的末端,此时 虽然队中已经没有元素了,但是还是不能让元素入队,即出现了“假溢出”的现象。循环队列就能避免出 现这个现象。
18. 深度优先搜索形成的是什么?森林唯一么? (森林,不能说树)(不唯一,因为邻接表可能不唯一)
19. 满二叉树的结点个数(n 层) 2 的 n 次方减一(2n-1)
20. 二叉查找树查找的时间复杂度以及中序遍历后得到什么样的序列 递增有序序列
21. 什么图可以进行拓扑排序? 有向无环图
22. 顺序队列的特征 队列是一种操作受限的线性表,只允许队尾入队,在队头进行出队。最大的特点是先进先出。