NKU_ALG_2021课程
文章平均质量分 52
MurmanskYi
NKU计算机科学本科学习笔记账号。FDU计算机专业硕士在读
博客纯属学习用途,方便整理归纳,不喜勿喷。
可善意交流探讨。
展开
-
ALG5:字符串比较问题
ALG5:字符串比较问题NKU算法导论课程课后练习题问题描述如下:详情见:字符串比较问题具体实现:采用动态规划的思想,先找到状态转移方程记原字符串为S;字符串A,B都是S的子串使用标记OPT(i,j)OPT(i, j)OPT(i,j)表示字符串A(0,i)与字符串B(0,j)之间的最短距离我们可以找到状态转移方程:OPT(i,j)=min{OPT(i,j)+dist(S[i],S[j])OPT(i,j−1)+kOPT(i−1,j)+kOPT(i,j)=min\left\{\beg原创 2021-06-21 13:59:46 · 119 阅读 · 0 评论 -
ALG 带权区间调度问题
ALG 带权区间调度问题算法导论文本算法题的代码复现问题描述:给定一些时间的区间Section=(s开始时间,f结束时间,v事件的权重)Section = (s_{开始时间},f_{结束时间},v_{事件的权重})Section=(s开始时间,f结束时间,v事件的权重),在这些事务中,找出不冲突的事务组合的最大权重,并返回该权重输入输出:输入:事务的数量 nnn,接下来 nnn行输入对应事务的(s,f,vs,f,vs,f,v)输出:不冲突的最大权重valuevaluevalue原创 2021-05-27 21:16:01 · 339 阅读 · 0 评论 -
ALG 求最大的利润
ALG 求最大的利润算法导论课本习题复现类似题目:ALG逆序计数题目描述:实现时的输入输出:输入:一个长度为n的数组:p[n]输出:找到最大对的利润 :max_p(相较于原题,笔者有所简化,没有按照要求找到该值最大的下标,只是找到了最大值)具体代码:优化方向:在后续的博文中会给出该题目的动态规划策略的代码分治算法的时间复杂度:Θ(n⋅logn)\Theta(n\cdot logn)Θ(n⋅logn)#include <iostream>using namespa原创 2021-05-27 17:58:17 · 121 阅读 · 0 评论 -
ALG 求单峰的位置
ALG 求峰的位置算法导论课本算法复现题目描述:输入:一个长度为n的元素不重复的数组输出:峰的位置index代码实现:主要想法:类似于二分查找的思想,问题分成两个子问题,在舍弃一个子问题。对剩下来的子问题继续递归求解。主题思想如上,但是可以用递归实现,也可以用循环实现。时间复杂度:Θ(n⋅logn)\Theta(n\cdot logn)Θ(n⋅logn)//找单峰数组的峰,左增右减#include <iostream>using namespace std;原创 2021-05-26 21:02:15 · 129 阅读 · 0 评论 -
ALG 随笔 使用字符串实现二进制加法
ALG 随笔 使用字符串实现二进制加法问题描述:输入两个用字符串存储的二进制数例如:A = “111”, B = “1000”输出,该两二进制数和:result = “1111”具体代码:需要设置一个进位#include <iostream>#include <algorithm>using namespace std;int ch2int(char x){ return int(x - 48);}string ADD(string x, s原创 2021-05-26 20:10:54 · 164 阅读 · 0 评论 -
ALG 逆序计数
ALG 逆序计数题目来源,算法导论课本算法整理复现问题描述输入:数组的长度:n; 下面n行,数组的所有元素输出:该数组中存在的逆序对的数量思路:与之前发过的一篇博客的思路类似,同样是采取分治算法最近点对问题整体思路:①将待计算的数组分成三部分,左边,右边和中间②左右两边的区间的计算式等价的,都可以看做是与整个问题相同的子问题③中间部分的计算可以将左右两边进行排序,左边从右开始扫描,右边从做开始扫描,最终得出中间的逆序数优化方向:将左右两边进行排序的部分,边进行技术,边排序。原创 2021-05-25 18:26:08 · 119 阅读 · 0 评论 -
ALG4:最近点对(the closest pair of points )
ALG4:最近点对(the closest pair of points )问题描述如下:详情见:最近点对问题描述具体实现:由于设置本题的 OJ 设置了时间限制,规定了只能用分治的思想实现分成三部分处理:根据中值将待处理的点集分成三部分左边求出最小值 dleftd_{left}dleft右边求出最小值 drightd_{right}dright中间的点带求出最小值 dmidd_{mid}dmid,(根据鸽巢原理,中间的点带中需要求的点不会超过6个)将左右两边的点集处理方式类似原创 2021-05-23 17:49:23 · 269 阅读 · 0 评论 -
ALG3:最小生成树(Minimum spanning tree)
ALG3:最小生成树(Minimum spanning tree)问题描述如下:(详见NKU计算机上机课程辅助评测)无向连通图最小生成树具体实现:①使用PRIM算法求最小生成树②使用KRUSKAL算法求最小生成树 采用了并查集代码如下;(已通过全部测试样例)因为是测试平台一次只能输出一个结果,为了测试两个算法对于测试样是否都能通过,于是两种算法都跑了一遍,只有两种算法得到的结果都相同,才会输出相同的答案。#include <iostre...原创 2021-05-02 17:54:51 · 180 阅读 · 0 评论 -
ALG2:拓扑排序
ALG2:拓扑排序问题描述如下:(详见NKU计算机上机课程辅助评测)拓扑排序具体实现:(以通过全部的测试样例)比较笨的方法,有较大的优化空间,对于输出成环的情况有较大的优化空间#include<iostream>#include<vector>#include<stack>#include<set>#include<algorithm>using namespace std;void d..原创 2021-05-02 17:43:23 · 286 阅读 · 1 评论 -
ALG1:GS算法,稳定婚姻匹配问题
ALG1:GS算法,稳定婚姻匹配问题问题描述如下:(详见NKU计算机上机课程辅助评测)稳定婚姻匹配实现代码:(此代码逻辑可通过全部测试样例)由于代码有一段时间了,一下的展示代码是没有自己的输入数据的,如果需要改为想要使用的数据,应该重新输入矩阵M和矩阵W中的数据#include<iostream>#include<algorithm>#include<vector>#include<set>using n..原创 2021-05-02 17:33:14 · 368 阅读 · 0 评论