摘要:
Conception 算法过程 首先将块读入内存 接下来构造初始“归并段”,通过**内部排序使每两个块**(这取决于生成初始归并段的内存工作区大小)内关键字有序: 然后是不断的内部归并,直至排序完毕 第一趟归并(8个初始归并段 → 4个归并段) 第二趟归并(4段 → 2段) 第三趟归并 (2段 → 阅读全文
摘要:
Selection Sort ”选择排序 “ ”每一趟将待排序的最小元素(或最大元素)加入有序子序列 “ 简单选择排序 算法实现 性能分析 Heap Sort ”堆排序 “ 在回顾一下6.006中对与堆的定义, 结合之前学到的二叉树的顺序存储就不难理解了 ”堆是一个顺序存储的完全二叉树“ 了解了大根 阅读全文
摘要:
Sorting “除了时间复杂度、空间复杂度以外,稳定性也是评价排序算法性能的重要指标 ” “什么叫做稳定的排序算法?” ”排序算法的分类 “ Insertion Sort ”插入排序 “ ”每次将一个待排序的记录插入前面已排好序的子序列,直至全部记录插入完成 “ 直接插入排序 当前待插入元素为 L 阅读全文
摘要:
key - value 键值映射 当多个关键字映射到同一个值时,则称发生了冲突,下面介绍一种解决冲突的方法: Chaining with hash “拉链法” 将映射值相同的关键字称为同义词,拉链法将同义词链接在一起 查找成功: 查找失败: ASL 查找成功: 查找失败: 实际上,上式中分子部分就是 阅读全文
摘要:
B树 Def. Branches/Balance?,多路平衡查找树 二叉查找树 → m叉查找树 如何保证查找效率? 限制最小分叉数(除开根结点) 限制任何一个结点的子树高度都要相同 如果m叉查找树满足以上两点限制,它就是一棵B树: 正如其名,着重关注两点特性:多路(m叉,注意上下限),平衡(子树高度 阅读全文
摘要:
顺序查找 有序表的顺序查找 如果事先知道表中关键字有序,则查找失败时,不用一直比较到表的另一端才能知道失败信息,从而降低顺序查找失败时的ASL 对于n个关键字,查找失败共n+1种情况(对应n+1个区间),上式假设对于n个结点的查找概率相同,则相应的n+1个失败情况也等可能(p=1/(1+n)) 如果 阅读全文
摘要:
Open addressing 开放寻址法 前面学习了一种最简单的冲突解决方法:链接法,现介绍另一种冲突解决方法:开放寻址法 开放寻址法关键在于计算探查序列(probe sequence) 对于每一个要插入的关键字k,显然需要连续地检查散列表以找到一个空槽,这个过程称为探查(probe) 一个探查序 阅读全文
摘要:
Def. 无向图 & 有向图 简单图 & 多重图 之后的图均为简单图 顶点的度 连通图和强连通图 SubGraph 连通分量 & 强连通分量 连通分量针对无向图,强连通分量针对有向图 生成树 & 生成森林 带权图 & 带权路径长度 Tips:注意区分这里的带权路径长度和哈夫曼树中结点的带权路径长度: 阅读全文
摘要:
AVL Trees Def. 新结点的插入可能会破坏平衡: Rotation left-heavy & right-heavy 将结点的平衡因子定义为:左子树高 - 右子树高 left-heavy说明平衡因子为1,right-heavy说明平衡因子为-1 下面讨论如何对 最小不平衡子树 进行调整 : 阅读全文
摘要:
What is it? Attempt_1 要找到指定节点p在中序遍历序列中的前驱: 再次遍历,设置两个工作指针pre和q分别指向前一个访问的结点和当前访问的结点 直到q指向指定结点p,此时pre即为前驱 Attempt_2 n个结点的二叉树拥有(n+1)个空链域,利用这些空链域来提供线索,即形成了 阅读全文