- 博客(16)
- 收藏
- 关注
原创 算法分析与设计-大作业-圆排列问题
1. 问题给定n个圆的半径序列,将它们放到矩形框中,各圆与矩形底边相切,求具有最小排列长度的圆排列。2. 解析解为<i1,i2,…,in>为1,2,…,n的排列,解空间为排列树部分解向量<i1,i2,…,ik>:表示前k个圆已排好。令B={i1,i2,…,ik},下一个圆选择ik+1.约束条件:ik+1∈{1,2,…,n}-B界:当前得到的最小圆排列长度。代价函数符号说明k:算法完成第k步,已经选择了第1-k个圆rk:第k个圆的半径dk:第k-1个圆到第k个圆的圆
2020-06-11 16:36:39
520
原创 算法分析与设计-作业13-读书笔记
算法导论(Introduction to Algorithms) 读后感 我在知乎上找有关算法书的推荐,偶然间找到了这本《算法导论》。虽然我没有完全看完,但我还是获得了一些收获。 通过阅读这本书使我更深刻地了解了算法思想。我了解了书中有关动态规划、贪心算法、摊还分析、B树、斐波那契堆等内容。初次接触算法,我感到还是有点困难,尤其是在算法分析这一块。一般来说学习算法,要理解自然语言对算法的描述,然后是对其进行相应的数学分析,接着是进行设计并实现代码。算法分析是算法中最难实现的一部分,也是最核心的部
2020-06-11 10:05:01
280
原创 算法分析与设计-作业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的颜色xk3. 设计颜色种数的完全m叉
2020-05-26 19:42:46
732
原创 算法分析与设计-作业11-最优前缀码
1. 问题代码(码字):Q{001,00,010,11}表示字符a,b,c,d同一序列:0100001产生两种译码(产生歧义):01 00 001;010 00 01二元前缀码:任何字符的代码不能作为其他字符代码的前缀利用二元前缀码译码:从第一个字符开始依次读入每个字符(0或1),如果发现读到的字串与某个码字相等,就将这个子串译作对应的码字;然后从下一个字符开始继续这个个过程,直到读完输入的字符串为止。二元前缀编码存储:二叉树结构,每个字符作为树叶,对应这个字符的前缀码看作根到这片树叶的一条路径
2020-05-12 21:26:04
640
原创 算法分析与设计-作业10-相容问题
1. 问题问题描述有n项活动申请使用同一个礼堂,每项活动有一个开始时间和一个截止时间。如果任何两个活动不能同时举行,问如何选择这些活动,从而使得被安排的活动数量达到最多。问题建模设S={1,2,…,n}为活动的集合,si和fi分别为活动i的开始和截止时间,i=1,2,…,n定义:活动i和j相容 si>=fi或sj>=fi,i≠j求S最大的两两相容的活动子集A。2. 解析...
2020-04-29 21:56:57
251
原创 算法分析与设计-作业9-最长公共子序列
1. 问题最长公共子序列问题,给定序列X=<x1,x2,…,xm>Y=<y1,y2,…,yj> 求X和Y最长公共子序列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...
2020-04-22 00:18:10
352
原创 算法分析与设计-作业8 矩阵链的乘法
1. 问题设A1,A2,…,An为n个矩阵的序列,其中Ai为Pi-1×Pi阶矩阵,这个矩阵链的输入用向量P=<P0,P1,…,Pn>给出。给定向量P,确定一种乘法次序,使得基本运算的总次数达到最小。例如,P=<10,100,5,50>,则A1:10×100,A2:100×5,A3:5×501)(A1A2)A3:10×100×5+10×5×50=75002)A1(A...
2020-04-14 23:35:21
525
原创 算法分析与设计-作业7 投资问题
1. 问题一般性描述:设m元钱,n项投资,函数fi(x)表示将x元投入第i项项目所产生的效益,i=1,2,……n.问:如何分配这m元钱,使得投资的总效益最高?组合优化问题:假设分配给第i个项目的钱数是xi,问题描述为:目标函数 max{f1(x1)+f2(x2)+…+fn(xn)}约束条件 x1+x2+…+xn=m,xi∈N实例:2. 解析(1) 递推公式设Fk(x)表示x万元投...
2020-04-07 20:57:52
648
原创 算法分析与设计-作业6 选第k小元素(分治法)
1.问题选第k小元素:特定分治策略2.解析k=|S1|+1,m*就是所要找的第k小的数;以m为划分标准后,比m小的有|S1|个,如果恰巧,k=|S1|+1,则m就是所要找到第k小的数)k<=|S1|,归约为在S1中找第k1小的子问题,k1在子问题中的相对位置不变,即k1=k;k>|S1|+1,归约为在S2中找k2位置的子问题,k2相对于S2子问题和k相对于S的关系,即k2=k...
2020-04-02 15:39:51
1478
原创 算法分析与设计-作业5 最近对问题
1. 问题P为笛卡尔平面上n>1个点构成的集合,求最近的两个点的距离(n=2k)2. 解析(1) 当2<=n<=3时,用蛮力算法求出最小距离。(2) 当 n>3时,利用点集在x轴方向上的中位数m,在该处作一条垂线,将点集分成大小分别为[n/2]和[n/2]的两个子集Pl和Pr。即使得其中[n/2]个点位于线的左边或线上,[n/2]个位于线的右边或线上。然后就可以通过...
2020-03-24 23:43:49
246
原创 算法分析与实践-作业4 二分归并排序
1.问题二分归并排序:对n个不同的数构成的数组A[1…n]进行排序,其中n=2^k。2.解析3.设计void merge_sort(int l, int r){ if (l == r) return; //拆分成单个数,返回 int mid = (l + r) / 2;//二分 merge_sort(l, mid);//对前半部分进行归并排序 merge_so...
2020-03-17 21:51:02
128
原创 算法分析与实践-作业3 检索算法
1. 问题写出两种检索算法:在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0.2. 解析(1) 顺序查找顺序查找类似数组遍历,从数组的第一个元素开始,检查数组的每一个元素,以便确定是否有查找的数据。(2) 二分查找二分查找适用于顺序存储结构且关键字有序排列的情况。首先,将数组中间位置记录的关键字与查找关键字比较,若两者相等,则查找成...
2020-03-10 22:02:17
265
原创 算法分析与实践-作业2-2 Dijkstra算法
问题对于下图使用Dijkstra算法求由顶点a到顶点h的最短路径,Dijkstra算法生成最短距离过程加入顶点b加入顶点c加入顶点f加入顶点e加入顶点g结果设计for (i = 1; i <= n - 1; i++) { //找到离1号顶点最近的顶点 min = inf; for (j = 1; j <= n; j++) ...
2020-03-08 17:03:24
206
原创 算法分析与实践-作业2-1 Floyd算法
问题用Floyd算法求解下图各个顶点的最短距离。Floyd算法生成最短距离过程初始化加入顶点1加入顶点2加入顶点3加入顶点4设计void Floyd(vector<vector<int>> &graph){ int size = graph.size(); for (int k = 0; k < size; k...
2020-03-08 16:12:11
174
原创 算法分析与实践-作业1-1 Prim算法构造最小生成树
Prim算法构造问题在一个给定的无向图G=(V,E)中,(v,u)代表连接顶点v的边,而w(u,v)代表该边的权重,若存在T为子集且为无循环图,使得w(T)最小,则该T为G的最小生成树。解析Prim算法生成最小生成树过程过程分析:任意选定开始节点,从单一节点的树T开始。选一条最小代价(权)的边(u,v)加入T,使T U{(u,v)}还是一棵树,重复这样的选边以及插入过程,直到...
2020-03-02 00:52:14
416
原创 算法分析与实践-作业1-2 Kruskal算法构造最小生成树
问题在一个给定的无向图G=(V,E)中,(v,u)代表连接顶点v的边,而w(u,v)代表该边的权重,若存在T为子集且为无循环图,使得w(T)最小,则该T为G的最小生成树。解析Kruskal算法生成最小树的过程过程分析:构造最小代价生成树T的Kruskal算法一次向T中加入一条边。在整个构造过程,一条条边按权值非递减的顺序一次次加入T,而且每次加入的边都不构成环路。由于G是连通图...
2020-03-02 00:49:27
227
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人