算法基础
文章平均质量分 77
Darcen289
这个作者很懒,什么都没留下…
展开
-
红黑树插入
print 输出:RB_INSERT_FIXUP 算法历经的情况种类数,即代码注释中 case x 的数字当z.p==z.p.p.right 时(即代码中被省略的 else 部分),情况种类数顺延为 4,5,6。文件输出:将插入完成后的红黑树进行 “先序遍历(NLR)” , “中序遍历(LNR)”和“层次遍历(Level-Order Traverse)” 并将相应的遍历序列输出到文件中。文件格式:第一行为待插入数据的个数,第二行为待插入的数据(int 类型, 空格分割)文件名: insert.txt。原创 2024-03-11 21:58:23 · 895 阅读 · 0 评论 -
Huffman 编码问题
然后,不断从优先队列中取出频率最小的两个节点,合并为一个新的父节点,并将其插入优先队列中,直到优先队列中只剩下一个节点,即根节点,表示构建完成的哈夫曼树。例如对于字符串“AABBBEEEEGZ”,如果使用定长编码,‘A’、‘B’、‘E’、‘G’、‘Z’字符各需要 3 位 01 串编码,编码后的字符长度为 3。接着,遍历输入字符串,根据哈夫曼编码将每个字符替换为对应的编码,生成压缩后的字符串。否则,递归地处理左子节点和右子节点,分别在当前编码基础上加上"0"和"1",继续生成编码。函数,用于计算压缩率。原创 2024-03-11 22:03:10 · 365 阅读 · 0 评论 -
回溯法解决调度问题
设有 n 个任务由 k 个可并行工作的机器来完成,完成任务 i 需要时间为。试设计一个算法找出完成这 n 个任务的最佳调度,使完成全部任务的时间最早。表示有 3 个任务,2 个机器。完成 3 个任务的时间分别为 2, 3, 4。函数递归实现遍历,但在遍历的情况下,时间开销过大,时间复杂度为。通过回溯法解决调度问题,本质上是通过遍历,本程序通过。输出三个测试案例所有任务完成的总时间,及调度方案。程序输入:从 test 系列文件获取数据。第二行为完成任务 i 需要的时间。,包含 n 个数据,以空格间隔。原创 2024-03-11 22:05:03 · 407 阅读 · 0 评论 -
区间树上重叠区间的查找
在最坏的情况下,如果树是一个完全平衡的二叉搜索树,并且查询区间与树中的所有区间都重叠,那么函数的时间复杂度将是O(n),其中n是树中节点的数量。将实验三中实现的红黑树插入算法改编为区间树插入算法,并实现重叠区间的查找算法:给定一棵区间树T和一个区间i,在O(min(n, klogn))时间内列出T中所有与i重叠的区间,其中k为重叠的区间数。综上所述,整个函数的时间复杂度为O(log n),其中n是树中节点的数量,满足实验要求O(min(n,klogn))。若存在结果,输出对应节点区间: [x, y]原创 2024-03-11 22:00:15 · 401 阅读 · 0 评论 -
最长公共子序列(LCS)算法
例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。输入:text1 = “abcde”, text2 = “ace”输入: text1 = “abc”, text2 = “def”输出: LCS:“ace”, 长度:3。原创 2024-03-11 22:01:55 · 1148 阅读 · 0 评论 -
BFS(考虑非连通图)
由于实验要求中已经说明,data中的图节点数较少且边比较密集所以采用邻接矩阵的存储方式,由于数据集规模较小,所以直接初始化一个矩阵对数据进行读取,若两个点之间存在边,将对应矩阵位置的值设为1即可得到邻接矩阵,然后实现BFS函数对图进行遍历即可。针对图,根据给定的数据选择合适的存储方式(邻接矩阵和邻接表中的一种)进行存储(存储方式选择也是实验的检查内容之一),并进行图的广度优先遍历的过程。对 twitter_small,选择一种合适的存储方式存储数据,并输出 BFS 的遍历时间。原创 2024-03-11 22:06:57 · 398 阅读 · 0 评论 -
求平面上n个顶点的最近点对问题
接着,采用了分治法的思想,将所有的点分为两个部分,分别计算左半部分和右半部分的最近点对的距离,然后取两者中的最小值。假设在两个平面中间的点的数量为m,寻找中间可能更小的距离的时间复杂度是O(m)。在检查中间区域的点对时,采用一种优化的方法,即只检查y坐标在指定范围内的点对,因为如果两点的y坐标相差过大,那么它们的距离肯定会大于当前的最小距离。综上所述,该程序的总时间复杂度为O(nlogn),其中n是输入数据的数量,m是两个平面中间的点的数量。最后,输出了最近点对的距离,以及这对点的编号。原创 2024-03-11 21:56:27 · 393 阅读 · 1 评论 -
快速排序算法及其优化
快速排序是一种分治算法,它选择一个元素作为基准(pivot),将数组分为两部分,一部分是小于基准的元素,一部分是大于基准的元素。当子数组的大小小于等于k时,使用插入排序算法对子数组进行排序。这样可以在处理小规模的子数组时,避免快速排序的递归调用,提高算法的效率。从未排序部分选择一个元素,将其插入到已排序部分的正确位置,重复这个过程直到所有元素都被插入到已排序部分。本实验代码的思想是使用快速排序算法对输入数据进行排序,并在处理小规模的子数组时使用插入排序算法进行优化。原创 2024-03-11 21:54:00 · 398 阅读 · 0 评论