随笔分类 - 数据结构与算法
摘要:无论是通过等分还是置换-选择排序得到的归并段,如何设置它们的归并顺序,可以使得对外存的访问次数降到最低? 1、例如,现有通过置换选择排序算法所得到的 9 个初始归并段,其长度分别为:9,30,12,18,3,17,2,6,24 (1)在对其采用 3-路平衡归并的方式时可能出现如下图所示的情况 (2)
阅读全文
摘要:减少初始归并段的个数 1、m 的求值方法为:m = ⌈n / l⌉(n 表示为外部文件中的记录数,l 表示初始归并段中包含的记录数) 2、如果要想减小 m 的值,在外部文件总的记录数 n 值一定的情况下,只能增加每个归并段中所包含的记录数 l。而对于初始归并段的形成,就不能再采用多路平衡归并排序算法
阅读全文
摘要:经过计算得知,如果毫无限度地增加 k 值,虽然会减少读写外存数据的次数,但会增加内部归并的时间,得不偿失 1、例如,对于 10 个临时文件,当采用 2-路平衡归并时,若每次从 2 个文件中想得到一个最小值时只需比较 1 次;而采用 5-路平衡归并时,若每次从 5 个文件中想得到一个最小值就需要比较
阅读全文
摘要:外部排序算法 1、内部排序算法,即排序的整个过程只是在内存中完成。而当待排序的文件比内存的可使用容量还大时,文件无法一次性放到内存中进行排序,需要借助于外部存储器(例如硬盘、U盘、光盘) 2、外部排序算法:借助外部存储器对数据进行排序的算法,包括置换平衡归并排序算法、置换选择排序算法等 3、外部排序
阅读全文
摘要:Data Structure Time Complexity Space Complexity Average Worst Worst Access Search Insertion Deletion Access Search Insertion Deletion Array Θ(1) Θ(n)
阅读全文
摘要:定义 1、一幅有方向性的图(或有向图)是由一组顶点和一组有方向的边组成的,每条有方向的边都连接着有序的一对顶点 2、在一幅有向图中,有向路径由一系列顶点组成,对于其中的每个顶点都存在一条有向边(弧)从它指向序列中的下一个顶点 3、有向环:一条至少含有一条边且起点和终点相同的有向路径 4、简单有向环:
阅读全文
摘要:介绍 1、对一个有向无环图G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边<u,v>∈E(G),则u在线性序列中出现在v之前 2、这样的线性序列称为满足拓扑次序的序列,简称拓扑序列 3、只有有向无环图才存在拓扑序列 4、对于一个有向无环图,可能存在多个拓扑序列 概念
阅读全文
摘要:介绍 1.树型的数据结构 2.可进行操作 (1)查询元素p和元素q是否属于同一组 (2)合并元素p和元素q所在的组 结构 1. 每个元素都唯一的对应一个结点 2. 每一组数据中的多个元素都在同一颗树中 3. 一个组中的数据对应的树和另外一个组中的数据对应的树之间没有任何联系 4. 元素在树中并没有子
阅读全文
摘要:介绍 1、利用堆实现,逻辑结构:堆,储存结构:数组 2、入队、出队时间复杂度O(logn) 3、对于一个含有 N 个元素的基于堆的优先队列 (1)插入元素操作只需不超过(lgN + 1)次比较 (2)删除最大元素的操作需要不超过 2 * lgN 次比较 4、用堆实现的优先队列在现代应用程序中越来越重
阅读全文
摘要:介绍 1、堆是顺序储存的完全二叉树,即树是逻辑上的存储结构,数组是实际的存储结构 2、分类 (1)大顶堆:每个结点的值都大于或等于其左右孩子结点的值,arr[i]>=arr[2i+1]&&arr[i]>=arr[2i+2](i 对应节点下标,i从0开始编号),升序使用大顶堆 (2)小顶堆:每个结点的
阅读全文
摘要:快慢指针应用 1.求链表的中间结点 (1)最开始slow与fast都指向链表的第 1 个有效结点 (2)fast的移动步长为slow的两倍:slow移动一格,fast移动两格 (3)当fast移动到最后一个结点时,slow移动到中间位置 (4)当链表有效节点个数为偶数:中间结点是第 length /
阅读全文
摘要:介绍 1.马踏棋盘算法,也称骑士周游问题 2.规则:将马随机放在国际象棋的 8×8 棋盘[0~7][0~7]的某个方格中,马按走棋规则(马走日字)进行移动,要求每个方格只进入一次,走遍棋盘上全部 64 个方格 3.基本思想:图的深度优先搜索 + 贪心算法(优化) 步骤 1.创建一个二维数组代表棋盘
阅读全文
摘要:最短路径问题:从某个顶点出发到达另外一个顶点的所经过的边的权重和最小的一条路径 弗洛伊德算法 1、应用场景 (1)既适用于无向加权图,也适用于有向加权图 (2)使用弗洛伊德算法查找最短路径时,只允许环路的权值为负数,其它路径的权值必须为非负数,否则算法执行过程会出错 (3)基于动态规划算法实现 2、
阅读全文
摘要:最短路径问题:从某个顶点出发到达另外一个顶点的所经过的边的权重和最小的一条路径 迪杰斯特拉算法 1、应用场景 (1)用于查找图中某个顶点到其它所有顶点的最短路径,该算法既适用于无向加权图,也适用于有向加权图 (2)注意,使用迪杰斯特拉算法查找最短路径时,必须保证图中所有边的权值为非负数,否则查找过程
阅读全文
摘要:修路问题 1、本质:最小生成树问题 2、最小生成树(MST),Minimum Cost Spanning Tree,给定一个带权的无向连通图,选取一棵生成树,使树上所有边上权的总和为最小 (1) N个顶点,一定有N-1条边 (2) 包含全部顶点 (3) N-1条边都在图中 克鲁斯卡尔算法查找最小生成
阅读全文
摘要:修路问题 1、本质:最小生成树问题 2、最小生成树(MST),Minimum Cost Spanning Tree,给定一个带权的无向连通图,选取一棵生成树,使树上所有边上权的总和为最小 (1) N个顶点,一定有N-1条边 (2) 包含全部顶点 (3) N-1条边都在图中 普里姆算法查找最小生成树的
阅读全文
摘要:介绍 1.贪婪算法(贪心算法)是指在对问题进行求解时,在每一步选择中都采取最好或者最优(即最有利)的选择,从而希望能够导致结果是最好或者最优的算法 2.贪婪算法所得到的结果不一定是最优的结果(有时候会是最优解),但是都是相对近似(接近)最优解的结果 贪心算法解决集合覆盖问题 1.描述:假设已知广播台
阅读全文
摘要:介绍 1、Sunday 算法是 BM 算法的改进,Sunday算法的位移比BM算法更大,在匹配随机字符串时效率比其他匹配算法快 2、时间复杂度:文本串长度为 n,模式串长度为 m (1)最好 O(n / m) (2)平均 O(n) (3)最坏 O(n * m) 规则 1、从前往后匹配,在匹配失败时关
阅读全文
摘要:介绍 1、该算法从模式串的尾部开始匹配,且拥有在最坏情况下O(N)的时间复杂度,是KMP算法的改进 2、坏字符规则 (1)当字符失配时,称文本串中的这个失配字符为坏字符,此时模式串需要向右移动,后移位数 = 坏字符匹配时在模式串中对应的索引 - 坏字符在模式串中最右出现的索引(匹配坏字符的字符) (
阅读全文
摘要:介绍 1、解决模式串在文本串是否出现过,如果出现过,最早出现的位置的经典算法 2、利用之前判断过信息,通过一个 next 数组,保存模式串中前后最长公共子序列的长度,每次回溯时,通过 next 数组找到,前面匹配过的位置 3、文本串长度为 n,模式串长度为 m,时间复杂度 O(n + m) 4、很详
阅读全文