![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法设计与分析
文章平均质量分 64
天地一扁舟
这个作者很懒,什么都没留下…
展开
-
算法设计与分析:第二章 递归 2.1计数排序之统计数对
/*统计数对:输入N(2<=N<=100)个数字(在0与9之间),然后统计出这组数中相邻数字组成的数字对出现的次数算法思路:采用一个二维数组A[11][11]的相邻数对信息,输入:20(表示要输入的数的数目)0 1 5 9 8 7 2 2 2 3 2 7 8 7 8 7 9 6 5 9输出:*//*关键:1计数排序不仅仅可以适用于一维数组,二维数组也是可以的原创 2015-08-04 01:09:43 · 701 阅读 · 0 评论 -
算法设计与分析:第五章 回溯法 5.4素数环
/*素数环:步骤1初始化2递归填数输入:68输出case11 4 3 2 5 61 6 5 2 3 4case21 2 3 8 5 6 7 41 2 5 8 3 4 7 61 4 7 6 5 8 3 21 6 7 4 3 8 5 2*/#include using namespace std;bool isRepeat(int k , int pos原创 2015-08-06 00:07:42 · 1267 阅读 · 0 评论 -
算法设计与分析:第六章 图 6.3网络最大流问题
/*网络最大流问题:指的是连通的赋权有向图D=(V,E),其中V是该图的顶点集,E是有向边集。网络上的流:是指定义在有向边集合E上的一个函数f={f(u,v)},并称f(u,v)=(u,v)的流量V中有一个源点s,一个汇点t,网络上的流都是由源点流出最终流入汇点。E中的每一条有向边(u,v)都有一个对应的容量上限c(u,v),通过这条边的流不能超过容量上限。在既不是源点也不是汇点的原创 2015-08-06 00:10:53 · 1596 阅读 · 0 评论 -
算法设计与分析:第六章 图 6.1单点失败
/*SPF:关键:1统计孩子结点个数,其实存在几个孩子,就说明存在几个划分2每次对进入的孩子结点设置为已经访问3对结点进行根节点/非根节点的是否回溯的更新4对是否是割点的情况进行讨论5p指向下一个为b,b自己为p,因为这里存储的是头结点,不是该结点本身这是一个单链表的尾插法建立问题:nodeArr[i]是头指针,下面存储的v是自己i,但是next是下一条边尾插法核心算法:pN原创 2015-08-06 00:10:19 · 510 阅读 · 0 评论 -
算法设计与分析:第五章 回溯法 5.3图的着色问题
/*图的着色问题: 给定无向图G(V,E),用m种颜色为图中每个顶点着色,要求每个顶点着一种颜色,并且使得相邻两个顶点之间的颜色不同分析:用一个n元组描述图的一种颜色(x1,x2,...,xn),xi属于[1,m],1<=i<=n为了用m种颜色对n个顶点着色,就有m^n中可能颜色组合,状态空间树是高度为n的完全m叉树约束方程:x[i] != x[j],若顶点i与顶点j相邻原创 2015-08-06 00:06:29 · 6013 阅读 · 0 评论 -
算法设计与分析:第四章 动态规划 4.3多段图的最短路径问题
/*多段图的最短路径问题:定义: 给定有向带权图G(V,E,W),如果把顶点集合V划分成k个不相交的子集V i ,1≤i ≤k,k≥2,使得E中的任何一条边(u,v),必有uЄ V i, v ∈ V i+m ,m≥1,则称这样的图为多段图。决策的第一阶段:确定图中第k-1段的所有顶点到达收点t的花费最小的通路。把这些信息保存起来,在最后形成最优决策时使用。用数组cost[i]存放顶原创 2015-08-05 09:52:24 · 7907 阅读 · 0 评论 -
算法设计与分析:第四章 动态规划 4.1数塔问题
/*有形如右图的一个数塔,从顶部出发,在每一结点可以选择向左走或是向右走,一直走到底层,要求找出一条路径,使路径上的数值和最大 。思想:动态规划:1 设d[i][j]:表示从i,j出发得到的最大数值和2 状态迁移方程:d[i][j] = max(d[i+1][j],d[i+1][j+1]) + a[i][j]3 边界:d[n][j] = a[n][j]4 所求状态:d[1]原创 2015-08-05 09:51:10 · 2274 阅读 · 0 评论 -
算法设计与分析:第三章 分治 3.6棋盘覆盖
/*棋盘覆盖:在一个2k×2k 个方格组成的棋盘中,恰有一个方格与其它方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。在棋盘覆盖问题中,要用图示的4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。当k>0时,将2k×2k棋盘分割为4个2k-1×2k-1 子棋盘(a)所示。特殊方格必位于4个较小子棋盘之一中,其余3个子棋盘原创 2015-08-05 09:50:33 · 620 阅读 · 0 评论 -
算法设计与分析:第三章 分治 3.2正整数划分
/*将正整数n表示成一系列正整数之和:n = n1 + n2 + ... +nk其中n1>=n2>=...>=nk>=1,k>=1正整数的这种表示称为正整数n的划分。求正整数n的不同划分个数输入:6输出:11分析:设p(n)表示正整数n的划分树,难以找到递归关系,考虑增加变量p(n) = q(n,n)设q(n,m)表示:对于数字n,将最大加数n1不大于m的划分个数q(n原创 2015-08-05 09:49:10 · 598 阅读 · 0 评论 -
算法设计与分析:第五章 回溯法 5.7构造高精度数据
/*构造高精度数据:构造一个尽可能大的数,使其从高到底前一位能被一整除,前2位能被2整除,...,前n位能被n整除分析:解空间:记高精度数据为a1a2...an,则(a1*10^(n-1) + a2*10^(n-2) + ... + an)整除n如何搜索?从高位到低维逐位尝试,失败回溯的算法。算法的首位从1开始枚举,以后各位从0开始枚举。生成的高精度数据用数组从高位到低位存储,一原创 2015-08-06 00:09:04 · 1333 阅读 · 4 评论 -
算法设计与分析:第五章 回溯法 5.2n皇后
/*n皇后问题*/#include using namespace std;void output(int x[] , int n){ for(int i = 1 ; i <= n ; i++) { for(int j = 1 ; j <= n ; j++) }}//判断当前列能否摆放成功。判断存不存在相同列或者在同一个斜线上bool place(int x[原创 2015-08-06 00:08:00 · 829 阅读 · 0 评论 -
算法设计与分析:经典贪心算法----强化版16题
HyperHorse 1贪心编号题目1货郎担问题:货郎担问题:假定有五个城市,已知费用矩阵如下,分别从五个城市出发,然后选取一条费用最小的线路,验证这种算法不能得到最优解。贪心选择:每次选择之前没有走过的费用最少的路关键:1) 每次选择费用最小的路径走,到达后再次做出选择,相当于一个规模小一点的TS原创 2015-08-19 10:03:31 · 6455 阅读 · 0 评论 -
算法设计与分析:经典动态规划算法----强化版16题
动态规划编号题目1最短行驶路线问题:给定一个的矩形网络,设其左上角为起点S。一辆汽车从起点S出发驶向右下角终点T。网格边上的数字表示距离。在若干个网格点处设置了障碍,表示该网格点不可到达。试设计一个算法,求出汽车从起点S出发到达终点T的一条行驶路程最短的路线。Floyd:划分阶段:阶段1:求所有点经过结点1到其他结点的原创 2015-08-19 10:06:40 · 4119 阅读 · 0 评论 -
算法设计与分析:第五章 回溯法 5.6_2找n个数中r个数的组合之递归解法
/*找n个数中r个数的组合例如:当 n=5, r=3 时 , 所有组合为:1 2 31 2 41 2 51 3 41 3 51 4 52 3 42 3 52 4 53 4 5 total=10 { 组合数 }分析1:每组3个数的特点:1)互不相同;2)前面的数小于后面的数;将上述两条作为约束条件。3) 当 r =3时,可用三重循环对每组中的3个数进行 枚举原创 2015-08-06 00:13:06 · 1878 阅读 · 1 评论 -
算法设计与分析:第五章 回溯法 5.5马的遍历
/*马的遍历问题:在n*m的棋盘中,马只能走“日” 字。马从位置(x,y)处出发,把棋盘的每一格都走一次,且只走一次。找出所有路径。问题分析:1问题解的搜索空间?棋盘的规模是n*m,是指行有n条边,列有m条边马在棋盘的点上走,所以搜索控件是整个棋盘上的n*m个点用n*m的二维数组记录马行走的过程,初值为0标识未经过。2在寻找路径过程中,活结点的扩展规则?对于棋盘上任意一点A原创 2015-08-06 00:12:39 · 2528 阅读 · 0 评论 -
算法设计与分析:第五章 回溯法 5.6找n个数中r个数的组合
/*找n个数中r个数的组合例如:当 n=5, r=3 时 , 所有组合为:1 2 31 2 41 2 51 3 41 3 51 4 52 3 42 3 52 4 53 4 5 total=10 { 组合数 }分析1:每组3个数的特点:1)互不相同;2)前面的数小于后面的数;将上述两条作为约束条件。3) 当 r =3时,可用三重循环对每组中的3个数进行 枚举原创 2015-08-06 00:08:31 · 4376 阅读 · 0 评论 -
算法设计与分析:第五章 回溯法 5.9连续邮资问题
/*连续邮资问题:假设国家发行了n种不同面值的邮票,并且规定每张信封上最多只允许贴m张邮票。连续邮资问题要求对于给定的n和m的值,给出邮票面值的最佳设计,在一张信封上可以贴出从邮资1开始,增量为1的最大连续邮资区间。举例分析:当n=2,m=3时,如果面值分别为1和4,则可以获得的邮资范围为1~6 加上 8 , 9 , 12如果过面试为1,3,则可以获得1~7之间的每个邮资值,并且7就原创 2015-08-06 00:09:51 · 8582 阅读 · 0 评论 -
算法设计与分析:第五章 回溯法 5.8流水作业车间调度
/*流水作业车间调度:n个作业要在两台机器M1和M2组成的流水线上完成加工。每个作业加工的顺序都是现在M1上加工,然后在M2上加工。M1和M2加工作业i所需的时间分别为ai和bi。流水作业调度问题要求确定这n个作业的最优加工顺序,使得从第一个作业在机器M1上开始加工,到最后一个作业在机器M2上加工完成所需的时间最少。作业在机器M1和M2的加工顺序相同。分析:解空间:是排列树,用数组原创 2015-08-06 00:09:34 · 6133 阅读 · 1 评论 -
算法设计与分析:第六章 图 6.2求有向图的强连通分支
/*有向图的强连通分支:算法思想:1对图G进行深度优先搜索,求出每个顶点的后续遍历序号postn2反转图G中的边,构造一个新的有向图G*3第2步中产生的森林中的每一颗数,对应一个强连通分支真正算法实现:1对逆图G进行后序遍历2反转逆图G中的边3将统计连通分支数采用邻接矩阵实现输入60 1 1 0 0 00 0 0 1 0 00 0 0 1 1 01 0 0 0原创 2015-08-06 00:10:31 · 1349 阅读 · 0 评论 -
算法设计与分析:第五章 回溯法 5.1TSP之货郎担问题
/*货郎担问题:四个顶点的货郎担问题。求从顶点1出发,最后回到顶点1的最短路线。 v1 v2 v3 v4v1 无穷 无穷 1 7v2 8 无穷 5 1v3 7 2 无穷 1v4 2 5 3 无穷算法分析:因为是采用回溯法来做,肯定是递归,然后还需要现场清理。要设置一个二维数组来标识矩阵内容,然后回溯还需要设计一个二维标记数组来剪枝,设定一个目标变量,原创 2015-08-05 09:53:34 · 7164 阅读 · 2 评论 -
算法设计与分析:第三章 分治 3.5Strassen矩阵乘法
/*Strassen矩阵乘法:A和B的乘积矩阵C中的元素C[i,j]定义为:C[i][j] = k从1到n 累加A[i][k]*B[k][j]若依此定义来计算A和B的乘积矩阵C,则每计算C的一个元素C[i][j],需要做n次乘法和n-1次加法。因此,算出矩阵C的 个元素所需的计算时间为O(n3)分治法:将矩阵A,B和C中的每一矩阵都分成4个大小相等的子矩阵。可以将方程C=AB重写原创 2015-08-05 09:50:14 · 928 阅读 · 0 评论 -
算法设计与分析:第二章 递归 2.6基于递归的插入排序
/*基于递归的插入排序:将待插入的关键字插入到已经排好序的序列中递归基:当数组元素个数n=1时,只有一个元素,已经是排序的递归步:如果前面k-1个元素已经排序,只要将第k个元素逐渐与前面k-1个元素比较,把他插入到适当位置,即可完成k个元素的排序递归的规律总结:一般先执行递归,再执行递归体,这样就可以把基本的操作放在最后完成了。样例输入:41 4 3 2101 9 8原创 2015-08-05 09:47:57 · 1947 阅读 · 0 评论 -
算法设计与分析:第二章 递归 2.5斜数组之找规律
/*找出如下图的规律:关键:找规律的题目,分析原始行列下标与现有下标之间的关系第一行 第二行 第三行 第四行斜行 原始 斜行 原始 斜行 原始 斜行 原始[1,1]-[1,1] [2,1]-[2,1] [3,1]-[3,1] [4,1]-[4,1][1,2]-[2,2] [2,2]-[3,2] [3,2]-[4,2][1,3]-[3原创 2015-08-05 09:47:32 · 677 阅读 · 0 评论 -
算法设计与分析:第二章 递归 2.4报数退圈游戏
/*游戏问题:12个小朋友手拉手站成一个圆圈,从某一个小朋友开始报数,报到7的那个小朋友退到圈外,然后他的下一位重新报“1”。这样继续下去,直到最后只剩下一个小朋友,求解这个小朋友原来站在什么位置上呢?算法思路:此题针对的是:1~n个数字.当为n+1的时候应该跳至11)传统方法:检测当前数是否还未被删除{Y:当前人报数,如果加1后的报数号超过总个数 {N:统计下一个人原创 2015-08-05 09:47:13 · 2617 阅读 · 0 评论 -
算法设计与分析:第二章 递归 2.3使x^2为一个各位数字互不相同的九位数
/*求x:使x^2为一个各位数字互不相同的九位数分析:对于x^2,分解各位,采用一个A[10]数组,A[i]初始设为0:表示该位上还没有数字A[i]为1:表示该位上已经含有数字;剪枝条件是如果当前A[iNum] == 1表明之前已经有一个这样的数字,因此此时可以删除*/#include #include int iVisArr[10] = {0};bool divideN原创 2015-08-05 09:46:32 · 1763 阅读 · 0 评论 -
算法设计与分析:第一张 算法分析介绍 1.3逻辑推理之谁能预测分数
/*预测分数:三维老师对某次学生竞赛进行了预测,他们预测如下:甲说:学生A得第一名,学生B得第三名乙说:学生C得第一名,学生D得第四名丙说:学生D得第二名,学生A得第三名竞赛结果表明,它们各说对了一般,说错了一半,并且无名次并列。试编程输入:a,b,c,d各自的名次自己分析:假设:X=i表明X学生的名次为i那么甲的陈述可以表示为:A==1,B==3 乙 :C=原创 2015-08-04 01:09:09 · 624 阅读 · 0 评论 -
算法设计与分析:第一张 算法分析介绍 1.2逻辑推理之警察抓小偷
/*警察抓小偷:警察局抓了a,b,c,d四名嫌疑犯,其中只有一人是小偷。审问中:a说:"我不是小偷"b说:"c肯定是小偷"c说:"小偷肯定是d"d说:"c在冤枉人"分析:看似非数值化的问题,经过数字化之后,可以用计算机求解。假设a,b,c,d分别用1,2,3,4编号。然后用x=i表示第i个编号的人是小偷a说的话等价于: x != 1b : x = 3原创 2015-08-04 01:08:45 · 4979 阅读 · 1 评论 -
算法设计与分析: 第一章 算法分析介绍 1.1求任意三个已知数的最小公倍数
/*求任意三个已知数的最小公倍数:自己分析:分治,看看先求出两个数的最小公倍数,例如8和12最小公倍数为24,再求24与28最小公倍数:这是可行的。另一种方法:8 = 2^312= 2^2 * 328 = 2^2 * 7最小公倍数 = 2^3 * 3 * 7 = 8 * 21 = 168所以应该先分解质因数,然后用一个数组保存质因子的指数,分解的时候覆盖分解;如果当前质因原创 2015-08-04 01:07:38 · 1098 阅读 · 0 评论 -
算法设计与分析:第二章 递归 2.2买商品
/*一个顾客买了价值为x元的商品:并将y元的钱教给售货员。售货员希望用张数最少的钱币找给顾客。找的钱最多需要以下6种币值:50,20,10,5,2,1这道题目的关键在于:设定一个数组b[6] = {50,20,10,5,2,1}采用累除法,依次从数组b的高位到低位进行累加,如果当前钱币的值除了之后有剩余,那么累加找钱币的个数,更新剩余需要找的钱,用下一个币值重复上述过程输入:1原创 2015-08-04 01:10:20 · 1210 阅读 · 0 评论 -
算法设计与分析:第二章 递归 2.7全排列
/*排列问题:有n个元素,编号为1,2,…,n,用一个具有n个元素的数组A来 存放所生成的排列,然后输出它们。自己分析:关于全排列生成问题,刘汝佳介绍的算法的主体思路。首先我们需要确定第一个数,这个数的选取是;遍历A[1]~A[n]接下来如何选取第二个数,这是一个问题:采用的方法是:判断当前位置上是不是已经有元素,如果没有就紧接着填充第2个元素算法出口是:当标记变量为0的时候,原创 2015-08-05 09:48:18 · 805 阅读 · 0 评论 -
算法设计与分析:第二章 递归 2.7多项式求值问题
/*多项式求值问题:有如下多项式:P (x)= An*x^n + An-1*x^(n-1) + ... +a1*x + a0如果分别对每一项求职,需要n*(n+1)/2个乘法,效率很低关键:采用递归式Pn(x) = An*x^n + An-1*x^(n-1) + ... +a1*x + a0 = ((...(((An)x + An-1)x + An-2)x ...)x +原创 2015-08-05 09:48:36 · 2085 阅读 · 0 评论 -
算法设计与分析:第四章 动态规划 4.6仪器维修时间表问题
/*程序不是自己写的,需要仔细研究一台精密仪器的工作时间为 n 个时间单位, 与仪器工作时间同步进行若干仪器维修程序. 一旦启动维修程序, 仪器必须进入维修程序. 如果只有一个维修程序启动, 则必须进入该维修程序. 如果在同一时刻有多个维修程序, 可任选进入其中的一个维修程序. 维修程序必须从头开始,不能从中间插入. 一个维修程序从第 s 个时间单位开始, 持续 t 个时间单位, 则该维修程序原创 2015-08-05 09:53:07 · 1328 阅读 · 0 评论 -
算法设计与分析:第四章 动态规划 4.5最长公共子序列
/*最长公共子序列: 假定,A=a 1 a 2 …a n 是字母表∑上的一个字符序列,如果存在∑上的另外一个字符序列S=c 1 c 2 …c j ,使得对所有的k,k=1,2,…,j,有c k =a ik (其中,1≤ik≤n),是字符序列A的一个下标递增序列,则称字符序列S是A的子序列。如果∑={x,y,x}, ∑上的字符序列是A=xyzyxzxz,则xxx是A的一个长度为3的子原创 2015-08-05 09:52:47 · 1240 阅读 · 0 评论 -
算法设计与分析:第四章 4.4资源分配问题
/*资源分配问题:是考虑如何把有限的资源分配给若干个工程问题。假设资源总数为 r,工程个数为n,给每个工程投入的资源不同,所得的利润也不同,要求把总数为 r 的资源分配给n个工程,以获得最大利润的分配方案。决策过程:把资源r划分为m个相同的部分,每份资源为r/m,m为整数。假定利润函数为Gi(x)=把x份资源分配给第i个工程得到的利润G(m) = i从1到n 累加求和Gi(x原创 2015-08-05 09:51:51 · 8168 阅读 · 2 评论 -
算法设计与分析:第四章 动态规划 4.2TSP之货郎担问题
/*如果对于任意数目的n个城市,分别用1~n编号,则这个问题归结为在有向带权图中,寻找一条路径最短的哈密尔顿回路问题。这里,V表示城市顶点,(i,j) ∈E 表示城市之间的距离,用邻接矩阵C表示城市之间的距离。思想:1设d(i,V-{i})表示从顶点i出发,经过V-{i}中各顶点一次,回到顶点i的最短路径长度2d(i,V-{i}) = d(i,|V) = k属于V min{Ci原创 2015-08-05 09:51:26 · 5839 阅读 · 0 评论 -
算法设计与分析:第三章 分治 3.7线性时间选择
/*线性时间选择:给定线性序集中n个元素和一个整数k,1≤k≤n,要求找出这n个元素中第k小的元素。输入:4 31 4 3 210 51 9 8 5 6 3 4 2 0 729 188,31,60,33,17,4,51,57,49,35,11,43,37,3,13,52,6,19,25,32,54,16,5,41,7,23,22,46,29【这个测试没有通过】输出:原创 2015-08-05 09:50:58 · 1869 阅读 · 0 评论 -
算法设计与分析:第三章 分治 3.3二进制大整数的乘法
/*二进制大整数的乘法:请设计一个有效的算法,可以进行两个n 位二进制大整数的乘法运算设x = 3141, A = 31 B=41 y = 5327, C = 53,D=27 x*y = AC*2^n + (AD + BC)*2^(n/2) + BD = AC*2^n + ((A-B)*(D-C) + A*C + B*D)*2^n + BD //少算一次乘法递归基:原创 2015-08-05 09:49:56 · 4751 阅读 · 2 评论 -
算法设计与分析:第三章 分治 3.4多项式乘积的分治方法
/*多项式乘积的分治方法:计算两个n阶多项式的乘法:p(x) = a0 + a1*x + a2*x^2 + a3*x^3 + ... + an*x^nq(x) = b0 + b1*x + b2*x^2 + b3*x^3 + ... + an*x^n为减少乘法运算次数,考虑把一个多项式划分成两个多现实p(x) = p0(x) + p1(x)*x^n/2q(x) = q0(x) + q原创 2015-08-05 09:49:30 · 4503 阅读 · 0 评论 -
算法设计与分析:第三章 分治 3.1最大最小问题
/*最大最小问题:企业老板有一袋金块,要从中挑选最重的一块给他的优秀员工,挑选最轻的一块给他的一位一般员工。自己分析:将数组一分为二,在每个数组中分别寻找最大和最小值。当数组中只剩一个元素的时候,那么这个元素既是最大值也是最小值由于采用分治:划分->递归求解->合并子问题输入:98 3 6 2 1 9 4 5 7输出:1 9*//*关键:1 采用分治法:划原创 2015-08-05 09:48:57 · 694 阅读 · 0 评论 -
算法设计与分析:第四章 动态规划 4.7 有向线段k值问题
#include #include #include #include /*有向线段k值问题:给定一条有向直线 L 以及 L 上的 n+1 个点 x0 < x1 < x2 < …< xn 。有向直线 L 上的每个点 xi 都有一个权 w(xi);每条有向边(xi ,xi-1) ,也都有一个非负边长 d(xi ,xi-1)。有向直线 L 上的每个点xi 可以看作客户,其服务需求量为原创 2015-11-25 23:11:52 · 3766 阅读 · 2 评论