i一般从0开始计,len取决于每一个数组元素占用的字节数。
不用记以上公式,其实就是a+数组元素所在单元格序号x字节数
如上题,在5行5列数组中(各元素占2字节),a[2] [3 ]即a+13x2;偏移量13为从0到a[2] [3 ]的数组元素
数据中大部分数据为0,用稀疏矩阵能省空间
例题:
记公式难,应对考试快捷法:代入法,随便代几个数排除错误(正确的 不一定正确,错的一定错)
此题,代A0,0可排除BC,代A1,1可排除D
循环队列队满和队空都是head,tail指向统一节点,两种解决方案:1.记录队满还是队空(麻烦);2.空间中少存一个元素(更常用)
(了解基本概念和操作)
(每次必考)
结点的度: 每个结点的度等于其孩子节点的个数,如①结点的度为2(②、③)
树的度:树的度为所有结点度数最高的,上题树的度是2
叶子结点:没有孩子结点的结点,如⑦、⑧
分支结点:有分支的结点
内部结点:非叶子结点且非根结点的结点(夹在中间的)
父结点:父结点和子结点是相对的概念,如②是④父结点,④是②的子结点,但②又是①的子结点
子结点:
兄弟节点:同一父结点
层次:把树分为一层一层
满二叉树:整棵树没有缺失的部分
完全二叉树:除了最底下一层,都是满的,而且底下从左到右排,缺的是右边的(不存在中间缺,右边还有)
层次遍历:一层一层,从左到右
前中后遍历是指访问根节点的先后
前序遍历:根左右; 中序遍历:左根右; 后序遍历:左右根
知道遍历序列还原二叉树
有前序中序,或中序后序都能推出,但只有前序后序不能推出
也是一种比较特殊的二叉树
工具树,用于哈夫曼编码
树的路径长度:树中一个结点到另一个结点之间的分支(累加起来的长度),如15到8路径长度为3
权:某个叶子节点中字符出现的频度(结点子树在整个树中所占的比例.)
带权路径长度(树的代价):路径长度×权 (如15到2:2×2)
构造一棵哈夫曼树的理念:为让其总的带权路径长最短,如上例第一课数为40,第二棵为25.
二叉树的基础上加虚线把很多节点串起来(对于有空子节点的结点而言),方便遍历
前序线索二叉树:根据前序遍历的序列,在结点的前后结点分别为其前继和后继(如下图示例)
中序后序同理
平衡度:左子树-右子树 (如上例中结点5,为1-0=1)
不平衡二叉树如何调整:思路为对折,把位于不平衡的结点放在比较中间或者直接作为根节点。
(了解基本概念、皮毛)
树和图最大区别,树不形成环路
无向图的邻接矩阵有对称性(对角)
按领接的顺序遍历,广度优先:0(0,4,3,1)其中4又有0 (6,1,0)但6,1都访问过了,即4(6)
都由0开始(0不受约束) 选择题(哪个不是拓扑排序)
①普里姆算法
把图的线(剩n-1条,n为点数)去掉留下若干条(留下来的边权值较小),然后连起来
如上题,留与A相连权值最小的B;与B权值相连的线和与A相连的线(除AB线外,已入选)权值最小的AE(200);与A、B、E相连的…;所有点都有线相连时即为最小生成树。
相同权值时,考虑其是否可能形成环路,形成环路的不相连
选5条最短的边
逐个比对
前提:查找的关键字的序列为有序排列(升/降序)
查找范围内未比较过的最大最小的下标的和的中间值,下标中间值取整(不是四舍五入,是直接去小数)
散列函数:key%p(key题中关键码);冲突时两种√√处理办法:线性探测法一直往下走;
即一个和全部对比(低配版冒泡)
分组,组内排序(顺序不对的交换位置);最后距离为1,即全部为1组了,经过前面的排序已经基本有序了,相比直接排序挪动的次数减少。
选择未选择过的最小的依次交换在前面
(最复杂)
思想:建立堆,取走堆顶,重建堆,取走堆顶,直到全部取完即完成排序(比直接排序选择高效)
适合于对一部分数据排序的情况,每一轮会选出一个
1.初建堆:先按完全二叉树把所有结点排成树,再调整(从最后一个非叶子结点开始调整)
2.取堆顶,重建堆(把最后的结点补在堆顶,再调)过程,
思想概念:
定一个数为基准,然后其他数跟其对比(如小的在其左,大的在其由,踢皮球的方式),把数据分为两组,两组中有继续分…
(较少考)
拆分位数排序,个十百…
(常考)
(选择题【操作、流程】)
2、算法的复杂度
主要两个维度
常数级复杂度都用O(1)表示[即O(3)也是O(1)] ;整个算法的复杂度为算法中最高的复杂度
O(log2n)如查找二叉树中,n为层数。