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