算法作业
QiuYuSy
想多了全是问题,做多了全是答案
展开
-
算法作业12-图的m着色问题
1、问题图的m着色问题。给定无向连通图G和m种颜色,用这些颜色给图的顶点着色,每个顶点一种颜色。如果要求G的每条边的两个顶点着不同颜色。给出所有可能的着色方案;如果不存在,则回答“NO”。2、解析设G有n个顶点,将顶点编号为1,2, ……,n,则搜索空间为深度n的m叉完全树,将颜色编号为1,2,……,m,结点<x1,x2,….,xk>(x1,x2,….,xk∈{1,……,m},1≤k≤n)表示顶点1的颜色x1,顶点2的颜色x2,……,顶点k的颜色xk.使用回溯法,具体步骤是将t=1传入b原创 2021-06-05 22:09:38 · 614 阅读 · 0 评论 -
算法作业11-二元前缀码
1、问题2、解析3、分析4、时间复杂度5、源码 https://github.com/QiuYuSY/AlgorithmWork/tree/master/src/xsr/eleventhLesson原创 2021-05-31 14:32:37 · 384 阅读 · 0 评论 -
算法作业十- 0-1 背包问题
1、问题有n个集装箱要装上2艘载重量分别为c1和c2的轮船,其中第i个集装箱的重量为wi,要求确定是否有一个合理的装载方案可将这个集装箱装上这2艘轮船。如果有,找出一种装载方案。注意,在满足的条件下才可能将这个集装箱装上这2艘轮船。2、解析解该类问题的思路是轻者先装,直到再装任何集装箱将使轮船载重量超过 C 时停止.在这之前我们首先明白一个定理:对于任何正整数 k,算法(轻者先装)对 k 个集装箱的实例得到最优解以下为该定理的证明:在这里是通过数学归纳法来证明的。(1)k=1,只有 1 个集装原创 2021-05-23 23:17:43 · 272 阅读 · 0 评论 -
算法作业9- LCS算法和背包算法
1、问题2、解析Xi=<x1,x2,…,xi>Yj=<y1,y2,…,yj>Zk=<z1,z2,…,zk>如果Zk是Xi和Yj的最长公共子序列(1)xi = yj,那么zk = xi = yj,Zk-1是Xi-1和Yj-1的最长公共子序列(2)xi ≠ yj,那么zk ≠ xi,Zk-1是Xi-1和Yj的最长公共子序列(3)xi ≠ yj,那么zk ≠ yi,Zk-1是Xi和Yj-1的最长公共子序列举例:X=<A,B,C,D,A>Y=&原创 2021-05-15 14:56:10 · 85 阅读 · 0 评论 -
算法作业8-矩阵链的乘法
1、问题2、解析3、设计Ai…j:表示矩阵链相乘的子问题Ai,Ai+1…Aj;M[i…j]:表示得到乘积Ai…j所用的最少基本运算次数;假设,最后一次相乘发生在矩阵链Ai…k和Ak+1…j之间,即AiAi+1…Aj=(AiAi+1…Ak)(Ak+1Ak+2…Aj) k=i,i+1,…,j-14、分析O(n3)5、源码 https://github.com/QiuYuSY/AlgorithmWork/tree/master/src/xsr/eighthLesson...原创 2021-05-09 20:22:17 · 106 阅读 · 0 评论 -
算法作业7-动态规划
1、问题设 m 万元钱,n 项投资,函数 表示将 x 万元投入第 i 项项目所产 生的效益,i=1,2,…,n.问:如何分配这 m 元钱,使得投资的总效益最高?2、解析3、设计For k=1,2,…,n //第k个项目 For x=0,1,2,…,m //k个项目共分配x元 For xk=0,1,2,…,x //第k个项目分配xk Fk(x)=max{fi(xk)+Fk-1(x-xk)}//递推公式4、分析O(nm2)5、源码 https://github.com/QiuY原创 2021-05-09 14:55:48 · 280 阅读 · 0 评论 -
算法作业6-选第k小元素:特定分治策略
1.问题选第k小元素:特定分治策略2.解析3.设计以S中的某个元素m作为划分标准,将S划分为两个子数组S1和S2,把这个数组中比m小的都放入S1的数组中,数组S1的元素个数是|S1|个;把这个数组中比m*大的都放入S2的数组中,数组S2的元素个数是|S2|个。若k<|S1|,则原问题归纳为在数组S1中找第k小的子问题。若k=|S1|+1,则m*就是要找的第k小元素。若k>|S1|+1,则原问题归纳为在数组S2中找第n−|S1|−1小的子问题。4.分析O(n)。5.源码ht原创 2021-04-24 20:20:58 · 187 阅读 · 0 评论 -
算法作业5-最近对问题
1.问题最近对问题2.解析将点排序后从中分为作于两边,找出左边的最小点距离,找出右边的最小点距离,再找出一个点在左边一个点在右边的最小距离。3.设计(1)当n≤2时直接求解。n为1时则返回一个double型的最大值,n为2时则记录两点并返回两点间距离。n>3时按如下步骤。(2)分解:根据x坐标,对S中的点升序排序,以经过第n/2个点做中垂线,分为左右两侧,将S均分成两个子集:S[1…m] 和[m+1…n] ,其中 (int) m=n/2 。这样,一部分在中垂线的左边或在中垂线上,另一部分在原创 2021-04-14 19:10:59 · 111 阅读 · 0 评论 -
算法作业4-二分归并排序
1.问题二分归并排序:对n个不同的数构成的数组A[1…n]进行排序,其中n=2^k2.解析运用递归,先将数组A从对半分开,然后分别对分开后的数组再次执行分开操作,直到子数组只有一个元素,然后再将子数组按顺序合并。这里用到了分而治之的思想,先将问题分成几个部分,简化他,然后再逐个解决。3.设计mergeSirt(){int left = 0;int right = arr.length-1;int mid = (left + right)/2;将left 到 mid 的数据放入子数组son原创 2021-03-31 18:58:26 · 137 阅读 · 0 评论 -
算法作业3-两种检索算法
1.问题[写出两种检索算法:在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0.按实验模板编写,“分析”部分仅给出复杂度结果即可。]2.解析排序后的数组进行检索操作可以使用二分查找和插值查找进行检索。二分查找:每次找到数组中间的那个元素与查找值进行比较,直到找到查找值。插值查找:与二分查找的区别在于寻找中间值的那个算法。3.设计二分查找:while (left < right){mid = (left+right)/2;if (原创 2021-03-22 16:25:03 · 94 阅读 · 0 评论 -
算法作业2-Floyd算法和Dijkstra算法求最短路径
2.解析3.设计5.源码https://github.com/QiuYuSY/AlgorithmWork/tree/master/src/xsr/secondLesson原创 2021-03-21 21:35:09 · 188 阅读 · 0 评论 -
算法作业1- Prim算法和Kruskal算法构造最小生成树
源码地址3.设计4.分析[prim 算法的时间复杂度为n²][kruskal 算法的时间复杂度为n²]5.源码[https://github.com/QiuYuSY/AlgorithmWork/tree/master/src/xsr/firstLesson]原创 2021-03-14 15:51:45 · 327 阅读 · 0 评论