算法设计
麓山君陌
在校科研生
展开
-
算法实验-Sherwood型线性时间选择问题
实验原理希望获得一个随机化算法B,使得对问题的输入规模为n的每一个实例均有这就是舍伍德算法设计的基本思想。当s(n)与tA(n)相比可忽略时,舍伍德算法可获得很好的平均性能。实验步骤对于选择问题而言,用拟中位数作为划分基准可以保证在最坏的情况下用线性时间完成选择。如果只简单地用待划分数组的第一个元素作为划分基准,则算法的平均性能较好,而在最坏的情况下需要O(n^2)计算时间。舍伍德选择算...原创 2020-02-10 11:39:37 · 2417 阅读 · 5 评论 -
算法实验-优先队列式分支限界法解01背包问题
实验原理分支限界法采用的是广度优先搜索,而优先队列采用的是队列里最优的出队,这里可以使用最大堆来实现活接垫优先队列,最大堆以活节点的界值作为优先级。实验步骤左子树的解的上界与父节点相同,不用计算。右子树的解的界值是:将剩余物品以其单位重量价值排序,然后依次装入物品,直到装不下时,再装入物品的一部分来装满背包,即采用贪心算法算出最大值,由此得到右子树中解的上界(虽然不是一个可行解,但可以作为最...原创 2020-02-10 11:38:03 · 4078 阅读 · 0 评论 -
算法实验-子集和问题
实验原理本题要求使用回溯法进行解决,建立一个子集树,将符合条件的子集输出实验步骤1、建立一颗子集树,每个元素都可以放在子集中,也可以不放在子集中,由此建立2、遍历所有的结点,如果当前子集中的元素相加和满足条件则进行输出,否则返回关键代码h=0//判断有无解def digui(i,n,s,z,c,num)://主递归函数 global h m=0 for j i...原创 2020-02-08 10:34:40 · 1912 阅读 · 0 评论 -
算法实验-直线k中值问题
实验原理这道题的解法很多,我在这里直接采用回溯法进行解决,通过剪枝和冲突,走遍所有可能的选择,直到得到最优解实验步骤1、建立一颗子集树,每个居民点都可以作为服务点,也可以不作为服务点,由此建立2、遍历所有的结点,当建立的服务点为3个时判断当前的花费,如果比最优花费低则进行更新3、遍历结束,得到最优花费关键代码min=99999//存储最优值def minest(xx,k,w,wz,...原创 2020-02-08 10:33:12 · 3165 阅读 · 1 评论 -
算法实验-回溯法求解0-1背包问题
实验原理通过剪枝和冲突,走遍所有可能的选择,最终得到最优解实验步骤1、每个节点有两种选择方法,依次对所有可能的方法进行遍历2、在遍历的过程中通过设定一全局变量用来比较所有的解法的结果,最终得到最优解关键代码lagestv=0bestx=[1,2]def jianzhi(i,n,c,w,ww): if i>=n: return 0 mi=w[i]...原创 2020-02-08 10:31:31 · 3304 阅读 · 0 评论 -
算法实验-Dijkstra贪心算法求解单源最短路径问题
实验原理通过设定一个二维数组,首先初识化各项数据,然后从每一个点开始,和之前找到的最短的路径的长度进行比较,如果还要小则进行替换,最终输出需要的哪一行或者哪一列即可。实验步骤1、从第一个点开始,每次进行判断,如果经过该点的路径比之前不经过该点的最短路径还要短,就进行替换2、将所有的点进行判断之后,得到的二维数组就是单源路径的最短路径,输出该数组即可关键代码# dijjkstra算法(原...原创 2020-02-08 10:30:03 · 3693 阅读 · 0 评论 -
算法实验-贪心算法解决背包问题
实验原理每次做出局部最优的选择,最后达成最优解实验步骤1、依贪心选择策略,将尽可能多的价值最高的物品装入背包。2、若将这种物品全部装入背包后,背包内的物品总重量未超过c,则选择价值次高的物品并尽可能多的装入背包。3、依该策略一直进行下去,直到背包装满。关键代码def show(n,c,w,value):#展示,找到对应的背包最大值和元素 print('最大价值为:',valu...原创 2020-02-03 14:26:01 · 4987 阅读 · 0 评论 -
算法实验-动态规划法解01背包问题
实验原理通过设定一个动态的临时数组,用来存储子问题的求解值,然后每次通过调用子问题的解来最终构成原问题的解实验步骤1、把问题分解成若干个子问题,如背包仅可以容纳 1 个物品且可以容纳的质量为一等。2、依次求出各个子问题的最优解。3、每个子问题的最优解又可以从它的子问题的最优解中得到。4、通过各个子问题的最优解得到原问题的最优解。关键代码#动态规划,对每一件物品遍历背包容量,当背包可...原创 2020-02-03 14:24:29 · 2820 阅读 · 0 评论 -
ACM算法笔记
此笔记为本人在准备ACM校赛时阅读资料所整理的总结心得,适合入门级的同学,仅供参考:第一部分语言第一章程序设计入门1.1算术表达式整数型用printf()时为%d,实数用%f输出,保留一位n数为printf(“%.nf”, )1.2变量及其输入整数型用scanf()时为%d,实数用%lf输入,%5d表示按5位数打印,%05d表示按5位数表示,不足补0。占位符和变量的数据类型一一对应,...原创 2019-10-26 20:32:27 · 477 阅读 · 0 评论 -
算法设计题型&总结(来自湖南大学2017级学长)
选择题5,10分简答题4,20分,不用写伪代码,可能会填表应用题5,35分,不用写伪代码,只写过程或者解空间树算法设计题2,35分,要写伪代码书上有题第一章算法概述:算法的概念,算法的时间复杂度分析,np理论第二章递归与分治:分治法的要求,递归的时间复杂度第三章动态规划:动态规划的要求,动态规划四个步骤第四章贪心算法:贪心算法的要求,约束条件商界函数第五章回溯法第六章分支限界法...原创 2019-10-25 13:30:18 · 1899 阅读 · 0 评论 -
算法设计与分析——期末复习系统c++源代码
此为本人在大二下学期期末考试前复习期间于闲暇时所创,聊以慰藉。本系统有一c++文件及四txt文件,分别命名为1.txt\2.txt\3.txt\4.txt,使用时请注意。现附源码如下:.cpp文件如下:#include <iostream>#include <windows.h>#include <fstream> using namespace ...原创 2019-10-25 13:13:58 · 1013 阅读 · 2 评论 -
算法实验-双色汉诺塔
实验原理与纯汉诺塔问题相同实验步骤经过奇偶异同分析可知。当出发柱子A为奇数个盘子 时;最上与最下层颜色为红色,过渡柱子C有偶数个盘子,且最 底层为蓝色:最上层位红色,目标B柱子最底层为红色.A柱子 最上层颜色为奇数一(奇数+偶数)=偶数一蓝色,过渡柱子C上 的偶数个盘子.移动时就变成出发柱子,A柱变成过渡柱子且 叠加的第一个盘子为红色,目标柱子叠加的是蓝色。以此类 推。不会出现同色叠加。 同...原创 2020-02-02 16:00:01 · 2599 阅读 · 1 评论 -
算法实验-字典序问题
实验原理类似于数值转换,可以通过递归实现实验步骤假设输入的字符长度为Len,那么先找到比len小的所有字符的升序排序。在找到跟Len长度一样但不是以字符串首字母开头的字符串,在找到以首字母开头的字符串。关键代码int f(int m,int n){ int sum=1,sum1=1; for(int i=1; i<=n; i++) sum*=i; ...原创 2020-02-02 15:58:36 · 2285 阅读 · 0 评论 -
算法实验-分治法实现合并排序
实验原理归并排序实验步骤① 先解决小规模的问题。② 将问题分解,将数组分为两个小的数组。③ 递归的解各子问题,将函数中分解的两个小的数组再进行以上两个步骤,最后都化为小规模问题。④ 将各子问题的解进行合并最终得到原问题的解。关键代码void merge(int a[],int b[],int l,int r){ int i=l; int mid=(l+r)/2; int j...原创 2020-02-02 15:56:41 · 4165 阅读 · 3 评论 -
算法实验-分治法查找最大最小值
实验原理利用分治法查找数组元素的最大值与最小值。并计算出程序运行所需要的时间。实验步骤①将问题分解,如果数组中只有一个元素,那么只需要比较该元素与当前的最大值最小值并进行更新即可②将问题扩大,数组中有多个元素,则可以通过套用二分法进行拆分,递归将整个数组拆分为多个只有一个元素的小数组,即分解为多个1问题③最后将每一个小数组得到的结果进行比较,选取其中的最大值和最小值对存储最大值最小值的变...原创 2020-02-02 15:54:55 · 9420 阅读 · 1 评论