算法分析与设计
大二下学期学习算法分析与设计时的代码
江潭落月复西斜
功不唐捐,玉汝于成。
展开
-
10054拦截导弹
拦截导弹Time Limit: 1000ms,Special Time Limit:2500ms,Memory Limit:32768KBTotal submit users: 1177,Accepted users: 599Problem 10054 : No special judgementProblem description某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高原创 2021-07-25 22:13:16 · 122 阅读 · 0 评论 -
10027Longest Ordered Subsequence Extention
A numeric sequence of ai is ordered if a1 < a2 < … < aN. Let the subsequence of the given numeric sequence ( a1, a2, …, aN) be any sequence ( ai1, ai2, …, aiK), where 1 <= i1 < i2 < … < iK <= N. For example, sequence (1, 7, 3, 5, 9,原创 2021-07-25 22:06:01 · 129 阅读 · 0 评论 -
优先队列式分支限界法求解0-1背包问题
实验名称 优先队列式分支限界法求解0-1背包问题。实验目的 优先队列式分支限界法求解0-1背包问题,得到不同规模数据实验的时间对比,并进行时间复杂度分析。实验原理 使用优先队列式的分支限界算法,能准确的找出限定容量背包所能装载的商品的最大价值, 并计算出程序运行所需要的时间。实验步骤 ①根据每个物品的重量和价值计算出物品的单价,根据单价将物品进行排序;②搜索解空间建立二叉树,从根节点开始;③广度优先遍历二叉树,并用极大堆表示活结点的优先级,选取扩展结点,找出可行解;④应当检查左儿子结点是原创 2021-07-25 22:03:20 · 5041 阅读 · 0 评论 -
随机算法实验—舍伍德法求解线性时间元素选择问题
实验名称 随机算法实验—舍伍德法求解线性时间元素选择问题。实验目的 随机算法实验—舍伍德法求解线性时间元素选择问题。实验原理 使用舍伍德型选择算法,根据不同的输入用例,能准确的输出用例中的中值, 并计算出程序运行所需要的时间。实验步骤 ① 判断是否需要进行随机划分;② 产生随机数 j,选择划分基准,将 a[j]与 a[l]交换;③ 以划分基准为轴做元素交换,使得一侧数组小于基准值,另一侧数组值大于基准值;④ 判断基准值是否就是所需选择的数,若是,则输出;若不是对子数组重复步骤②③。时间原创 2021-07-25 22:01:51 · 893 阅读 · 1 评论 -
回溯算法实现题 5-13 工作分配问题
实验名称 回溯算法实现题 5-13 工作分配问题。实验目的 回溯算法实现题 5-13 工作分配问题。实验原理 ①解空间:解空间为{x1,x2,x3,……,xn},其中xi=1,2,3,4,……,n,表示第i个人安排的工作号。②剪枝方法:用一个数组来存放工作的完成状态,当工作完成时设为1,否则设为0。实验步骤 ①建一个二维数组c[i][j],用以表示i号工人完成j号工作所需的费用。②给定一个循环,从第1个工人开始循环分配工作,直到所有工人都分配到。③为第i个工人分配工作时,再循环检查每原创 2021-07-25 18:48:21 · 1004 阅读 · 0 评论 -
分支限界法求解TSP问题
实验名称 分支限界法求解TSP问题。实验目的 分支限界法求解TSP问题。实验原理 对于TSP,我们需要利用上界和下界来对BFS进行剪枝,通过不断更新上界和下界,尽可能的排除不符合需求的child,以实现剪枝。最终,当上限和下限等同时,我们可以获得最优的BFS解,以解决TSP问题。实验步骤 ①根据限界函数计算目标函数的下界;采用贪心法得到上界;②将待处理结点表PT初始化为空;③从顶点1出发求解TSP问题;④while (k>=1):i=k+1;x[i]=1;while (x[i原创 2021-07-23 11:42:25 · 5798 阅读 · 0 评论 -
10149Bit Strings
Bit Strings#include <iostream>#define maxN 12using namespace std;int n,a[maxN];void f(int i,int n,int sum){ if(sum>1) { return; } if(i>=n) { if(sum==1) { for(int j=0;j<n;j++)原创 2021-07-23 11:40:24 · 141 阅读 · 0 评论 -
10104病毒
病毒Time Limit: 1000ms,Special Time Limit:2500ms,Memory Limit:32768KBTotal submit users: 41,Accepted users: 23Problem 10104 : No special judgementProblem description二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码。如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的。现在委员会已经找出了所有的病原创 2021-07-23 11:37:24 · 170 阅读 · 0 评论 -
分析题3-2 单调递增最长子序列问题
实验名称 分析题3-2 单调递增最长子序列问题。实验目的 分析题3-2 单调递增最长子序列问题。实验原理 动态规划+二分查找。array是原数组,B中存储我们在考察序列时的值,len用来记录B数组中个数。实验步骤 ①用array[0]初始化辅助数组B[0],len=1,活动列表添加array[0]。②添加后面的元素。若小于当前活动列表中所有活动序列最末尾的元素,则创建一个长度为1的新的活动序列,并删除其他等长的活动序列。若大于所有活动序列最末尾的元素,相应的array和B数组最末尾的元素原创 2021-07-23 11:19:54 · 534 阅读 · 1 评论 -
实现题3-17 字符距离问题
实验名称 实现题3-17 字符距离问题。实验目的 实现题3-17 字符距离问题。实验原理 使用动态规划算法,根据不同的输入用例,能准确的输出用例中的最短扩展距离,并计算出程序运行所需要的时间。假设串A1,B1具有最短距离,那么A1[0],B1[0]只有如下三种情况:Case 1 Case 2 Case 3A A1[0] ____ A1[0]B ____ B1[0] B1[0]每种情况我们需要求出后继子串的最短距离加上当前字符的距离,就得倒最原创 2021-07-23 11:12:32 · 456 阅读 · 0 评论 -
回溯法求解0-1背包
实验名称 回溯法求解0-1背包。实验目的 回溯法求解0-1背包。实验原理 给定任意几组数据,利用回溯算法的限界与剪枝的思想,求解0-1背包问题并输出答案。实验步骤 ① 将用例数据从文件中读取,初始化数据;② 将物品按照单位重量的价值从大到小排序;③ 从第0层开始进行递归函数Backtrack, 当i>n时,算法搜索至叶子结点,得到一个新的物品装包方案,此时算法适时更新当前的最优价值和最优解; 当i<n时,当前扩展结点位于排列树的第(i-1)层,此时算法选择下一个要安排的原创 2021-07-23 11:10:52 · 775 阅读 · 0 评论 -
用Dijkstra贪心算法求解单源最短路径问题
实验名称 用Dijkstra贪心算法求解单源最短路径问题。实验目的 用Dijkstra贪心算法求解单源最短路径问题。实验原理 使用基于贪心算法的dijkstra算法,能准确的输出用例中的单源最短路径, 并计算出程序运行所需要的时间。实验步骤 ① 将用例数据从文件中读取到数组中,初始化所有数组包括dis数组和visit数组;②选取dis数组中尚未访问的最小值结点u,标记该结点并且以该节点为出发点,遍历该节点能够到达的所有未被访问的顶点v;③若遍历到的顶点v此时的dis最短路径值大于起始结点经原创 2021-07-23 11:08:10 · 1576 阅读 · 0 评论 -
13150So Easy!
A sequence S n is defined as:Where a, b, n, m are positive integers.┌x┐is the ceil of x. For example, ┌3.14┐=4. You are to calculate S n.You, a top coder, say: So easy!InputThere are several test cases, each test case in one line contains four positi原创 2021-07-23 11:03:02 · 112 阅读 · 0 评论 -
12931ZZ
ZZProblem descriptionZZ-function, a shorter name of ZeedZaad-function is defines as followed.Given 4 inegers a, b, c and d, your task is to find ZZ(c, d)InputFirst line of input is a number of test cases T ≤ 200.Each test case is a line containing of原创 2021-07-23 10:43:08 · 258 阅读 · 0 评论 -
实现题2-7 集合划分问题
实验名称 实现题2-7 集合划分问题。实验目的 通过上机实验,实现题2-7 集合划分问题。实验原理 举例:从n=3处考虑一下规律。n=3时,F有F(3,1),F(3,2),F(3,3)三种情况,其中F(3,1)和F(3,3)都为1,F(3,2)有两个来源,我们看成是把3插入n=2时的集合中。1、直接插入F(2,2)的集合中,可以插入任意一个集合,所以有2种情况。2、在F(2,1)中多加一个单独有3的集合。所以F(3,2)=F(2,1)+F(2,2)*2;F(2,1)=1,F(2,2)=原创 2021-07-22 11:12:02 · 1455 阅读 · 0 评论 -
实现题2-3 半数集问题
实验名称 实现题2-3 半数集问题。实验目的 通过上机实验,实现题2-3 半数集问题。实验原理 设set(n)中的元素个数为f(n),6的前面可以加上1、2、3,2、3的前面又都可以加上1,也就是f(6)=1+f(3)+f(2)+f(1)。则显然有递归表达式:f(n)=1+∑f(i),i=1,2……n/2。实验步骤 ① 设set(n)中的元素个数为f(n),6的前面可以加上1、2、3,2、3的前面又都可以加上1,也就是f(6)=1+f(3)+f(2)+f(1)。则显然有递归表达式:f(n原创 2021-07-22 11:09:05 · 812 阅读 · 0 评论 -
用贪心算法求解背包问题
实验名称 用贪心算法求解背包问题。实验目的 通过上机实验,用贪心算法求解背包问题。实验原理 使用贪心算法,根据不同的输入用例,能准确的输出最优值,并计算出程序运行所需要的时间。实验步骤 ①首先计算每种物品单位重量的价值vi/wi,按单位价值重量进行升序排序②然后根据贪心算法,将尽可能多的单位重量价值最高的物品装入背包,若将这种物品全部装入背包后,背包内的物品总重量未超过C,则选择单位重量价值次高的物品尽可能多地装入背包。③按照以上策略,一直进行下去,知道背包装满为止时间复杂度分析该算法原创 2021-07-22 11:06:22 · 4717 阅读 · 0 评论 -
用动规法实现0-1背包
实验名称 用动规法实现0-1背包。实验目的 用动规法实现0-1背包:给你n个物品,每个物品有其重量和价值,现在有一个能装一定重量物品的背包,物品不能分割,要求能装下的最大价值。并输出最大价值下装载了哪几个物品。实验原理 动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题。但是经分解得到的子问题往往不是互相独立的。不同子问题的数目常常只有多项式量级。在用分治法求解时,有些子问题被重复计算了许多次。如果能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,就可以避免大量重原创 2021-07-22 11:04:15 · 272 阅读 · 0 评论 -
14086Wireless Network
Wireless NetworkTime Limit: 10000MS Memory Limit: 65536KTotal Submissions: 14086 DescriptionAn earthquake takes place in Southeast Asia. The ACM (Asia Cooperated Medical team) have set up a wireless network with the lap computers, but an unexpecte原创 2021-07-22 11:01:35 · 111 阅读 · 0 评论 -
10010Recaman’s Sequence
Recaman’s SequenceTime Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:65536KBTotal submit users: 1252, Accepted users: 1085Problem 10010 : No special judgementProblem descriptionThe Recaman’s sequence is defined by a0 = 0 ; for m > 0, am =原创 2021-07-22 10:59:44 · 106 阅读 · 0 评论 -
实现题1-4 金币阵列问题
实验目的 实现题1-4 金币阵列问题实验原理 使用分治法,根据给定阵列初始状态,目标状态,按游戏规则计算从初始状态到目标状态需要的最少变换次数实验步骤 ①先确定某一种行变换T②经过T变换之后我们不在进行行反转,而是进行列交换③经过一定的列变换后观察是否和目标矩阵相同,相同则表明变换有效,得到一个变换步骤④取步骤中的最小值算法时间复杂度使用了三重循环,所以为O(n^3)实验心得 通过这次实验,我学习了如何利用分治法解决复杂的金币问题完整代码金币阵列#include<cmat原创 2021-07-22 10:07:17 · 988 阅读 · 0 评论 -
字典序问题
实验目的 在数据加密和数据压缩中常需要对特殊的字符串进行编码。给定的字母表A由26个小写字母组成。该字母表产生的升序字符串中字母从左到右出现的次序与字母在字母表中出现的次序相同,且每个字符最多出现1次。例如,a,b,ab,bc,xyz等字符串都是升序字符串。现在对字母表中产生的所有长度不超过6的升序字符串,计算它在字典中的编码。实验原理 使用分治算法,根据不同的输入用例,能准确的输出产生的所有长度不超过6的升序字符串,计算它在字典中的编码,并计算出程序运行所需要的时间。实验步骤 ①求出长度为1,原创 2021-07-22 10:04:17 · 491 阅读 · 0 评论 -
分治法实现合并排序
实验目的 分治法实现合并排序,得到不同规模数据实验的时间对比,并进行时间复杂度分析。实验原理 使用分治法,根据不同的输入用例n,准确输出这n个随机数从小到大排列后的序列。合并排序算法思想:将待排序元素分成大小大致相同的两个子集合,分别对两个子集合进行排序,最终将排好序的子集合合并成要求的排好序的集合。实验步骤 ①创建两个数组。②不断将原数组从中间分开,然后放入两个数组中。③将两个数组中的元素逐一进行比较放入原数组中。关键代码//合并函数,q为切分点,array数组就是随机数的数组 vo原创 2021-07-22 10:00:13 · 2497 阅读 · 0 评论 -
分治法查找最大最小值
实验目的 利用分治法查找数组元素的最大值与最小值,并计算出程序运行所需要的时间,得到不同规模数据实验的时间对比,并进行时间复杂度分析。实验原理 使用分治法,根据不同的输入用例n,准确输出这n个随机数中的最大最小值。实验步骤 ①递归将整个数组拆分为多个只有一个元素的小数组。②如果数组中只有一个元素,那么只需要将该元素与当前的最大最小值比较并更新最大最小值即可。③将每一个小数组得到的结果进行比较,选取其中的最大值和最小值并进行更新。关键代码 void BS(int a[],int left,in原创 2021-07-22 09:55:12 · 8966 阅读 · 2 评论