自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 收藏
  • 关注

原创 算法分析与设计 大作业 圆排列问题

1. 问题给定n个大小不等的圆c1,c2,…,cn,现要将这n个圆排进一个矩形框中,且要求各圆与矩形框的底边相切,从这n个圆的所有排列中找出有最小长度的圆排列。2. 解析使用回溯算法求解。圆排列问题的解空间是一棵排列树,按照回溯法搜索排列树的算法框架,设开始时a=[r1,r2,……rn]是所给的n个元的半径,则相应的排列树由a[1:n]的所有排列构成。在回溯过程中,当i>n时,算法搜索至叶节点,得到新的圆排列方案,计算当前圆排列的长度,适时更新当前最优值;当i<n时,当前扩展节点位于排列

2020-06-15 20:58:52 871 1

原创 算法分析与设计13《算法图解》读后感

Nicklaus Wirth曾提出“数据结构+算法=程序”,这个公式揭示了程序的本质,从中也能看出算法的重要性。如果说数据结构是程序的骨架,那算法就是程序的灵魂,正如这个比喻,在刚开始上算法课时,我对算法的感受就是如灵魂一样复杂、抽象、难以理解的,尤其是在算法的数学证明与复杂度分析方面。《 算法图解》这本书不厚,只有200页不到,作者自称其为算法入门书籍,事实也是如此,它所涉及到的算法基本都是课上讲过的。在读完这本书后,我依然有所收获,一是对复杂度有了更深刻的理解,二是学习算法的观念有了改变。算法本身就

2020-06-13 22:39:34 390

原创 算法分析与设计12图的m着色问题

1. 问题给定无向连通图G和m种不同的颜色,用这些颜色为图G的各顶点着色,每个顶点着一种颜色,使G中每条边的2个顶点着不同颜色。2. 解析通过回溯的方法,不断的为每一个节点着色,在前面n-1个节点都合法的着色之后,开始对第n个节点进行着色,这时候枚举可用的m个颜色,通过和第n个节点相邻的节点的颜色,来判断这个颜色是否合法,如果找到那么一种颜色使得第n个节点能够着色,那么说明m种颜色的方案是可行的3. 设计int Check(int k) { for (int i = 1; i <= k;

2020-05-27 15:02:54 656

原创 算法分析与设计11最优前缀码

1. 问题给定字符集C={x1,x2,…,xn}和每个字符的频率f(xi),求关于C的一个最优前缀码2. 解析构造最优前缀码的贪心算法就是哈夫曼算法。将字符集作为森林,从中选出频率最低的两个字符,将这两个字符的合并成一棵新树,新树的根节点权值为两字符频率之和,从森林中删除这两个字符,将新树加入森林,重复直至全部合并为一颗树,即为所求的哈夫曼树。3. 设计void CreateHuffmanTree(HuffmanTree T, int n1) { InitHuffmanTree(T, n1);

2020-05-17 14:16:29 573

原创 算法分析与设计10相容问题

1. 问题有 n 项活动申请使用同一个礼堂,每项活动有一个开始时间和一个截止时间。如果任何两个活动不能同时举行,问如何选择这些活动,从而使得被安排的活动数量达到最多2. 解析把活动按截止时间从小到大排序,然后从前往后挑选,只要与前面选的活动相容,就可以选入其他策略:(1)按开始时间从小到大排序(2)按活动占用时间从小到大排序3. 设计t = 0;for (i = 0; ...

2020-05-04 14:27:32 207

原创 算法分析与设计9最长公共子序列

1. 问题给定两个序列X,Y,求这两个序列的最长公共子序列2. 解析主要使用动态规划策略来解决;如果Zk是Xi和Yj的最长公共子序列:(1)Xi = Yj,那么Zk = Xi = Yj(2)Xi != Yj, Zk != Xi,那么Zk是Xi-1和Yj的最长子序列(3)Xi != Yj, Zk != Yj,那么Zk是Xi和Yj-1的最长公共子序列3. 设计void LCS(){...

2020-04-26 20:01:37 231

原创 算法分析与设计8矩阵链乘法

1. 问题设A1,A2…An为n个矩阵的序列,其中Ai为Pi-1×Pi阶矩阵,这个矩阵的输入用向量P=<P0,P1….Pn>给出;给定向量P,确定一种乘法次序,使得基本运算的总次数达到最小。2. 解析采用动态规划策略,迭代算法;用m[i,j]表示得到乘积Ai…j所用的最少基本运算次数,s[i,j]表示最后一次乘法运算的位置。递推方程:示例:P = <10,20,15...

2020-04-19 11:42:45 329

原创 算法分析与设计7动态规划:投资问题

1. 问题设 m 元钱, n 项投资,函数 表示将 x 元投入第 i 项项目所产生的效益, i=1,2,…,n.问:如何分配这 m 元钱,使得投资的总效益最高?以下表为例:2. 解析设Fk(x)表示 x 万元投给前 k 个项目的最大效益, k=1,2,…,n, x=1,2,…,m递推方程:Fk(x) = max{ fk(xk) + Fk - 1(x - xk) } 其中 0 <...

2020-04-12 13:30:42 640

原创 算法分析与设计6找第k小数

1. 问题在一组数据D中找到第k小的数2. 解析将数据每5个分为一组,找出每组中位数存在数组M中,再找到M的中位数m作为划分点,小于m的数据存放在S1中,大于m的数据存放在S2中;若k=|S1|+1,则m就是第k小的数,若k<=|S1|,则在S1中找k位置的数,若k>|S1|+1,则在S2中找k-|S1|-1位置的数3. 设计4. 分析5. 源码https:/...

2020-04-04 16:10:36 287

原创 算法分析与设计5最近点对

1. 问题在含有n个点的集合p中找出最近的两个点的距离2. 解析采取分治策略,利用递归将问题反复拆分为两个子集,再对每个子集分别进行计算分析,然后合并比较得出最近点对间的距离3. 设计 if (n < 2) { 蛮力法计算出min_dist; } mid = (high + low) / 2; dist1 = ClosestPoint(p, low, mid); dis...

2020-03-29 13:13:19 167

原创 算法分析与设计4二分归并排序算法

1. 问题二分归并排序:对n个不同的数构成的数组A[1…n]进行排序,其中n=2^k2. 解析二分归并排序就是不断地选择中间数,将问题一分为二,然后对这两个子问题进行排序,再将两个排序好地子问题合并;可以通过递归来实现“二分”。3. 设计void Merge(int d[], int left, int mid, int right, int* t) { int i = left; ...

2020-03-21 12:15:15 157

原创 算法分析与设计3.2对分查找

1. 问题在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=02. 解析对分查找,从中间元素开始与key比较,若key<中间元素,则在数组的左半边继续取中间元素查找;若key>中间元素,则在数组的右半边取中间元素继续查找;直到全部查找完毕或找到key为止3. 设计while (low <= high) { mid = ...

2020-03-14 19:51:09 136

原创 算法分析与设计3.1顺序查找

1. 问题在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=02. 解析顺序查找,从第一个元素x开始逐个与需要查找的元素key进行比较,当x=key时返回x的下标,如果比较到最后都没有找到,则返回j=03. 设计for (每一个元素x) { if (x == key) { 返回x的下标; flag = 1; break...

2020-03-14 19:47:48 216

原创 算法分析与设计2.2Dijkstra算法

1. 问题对于下图使用Dijkstra算法求由顶点a到顶点h的最短路径2. 解析(1)将图中的a,b,···h与1,2···8相对应,便于编写代码;(2)将起点到所有点的距离存储在一维数组中,并找出其中距离最近的点;(3)将(2)中找到的点作为中间点,判断距离是否会会更近,若更近则更新距离;(4) 重复(2)(3)3. 设计void Dijkstra( ) { visted[s...

2020-03-07 22:55:22 189

原创 算法分析与设计2.1Floyed算法

1. 问题用Floyd算法求解下图各个顶点的最短距离,给出距离矩阵2. 解析(1)任意节点i到任意节点j的距离可能是:①i到j的直接距离;②i经过k1、k2···kn后到j的距离;(2)假设D[i][j]存储的是点i到j的最短距离,对kn判断D[i][kn]+D[kn][j]是否小于D[i][j];(3)若D[i][kn]+D[kn][j]<D[i][j],则更新D[i][j]的...

2020-03-07 22:52:13 95

原创 算法分析与设计1.2Kruskal算法构造最小生成树

1. 问题设G=(V,E)是无向联通带权图,E中的每一条边(u,v)的权为w(u,v);如果G的一个子图G1是一颗包含G中所有顶点的树,则称G1为G的生成树。生成树上各边权的总和称为该生成树的耗费。在G的所有生成树中,耗费最小的生成树称之为最小生成树。2. 解析3. 设计void Kruskal(int Vnum){ while(最小生成树中边数 < Vnum - 1...

2020-03-01 15:45:17 257

原创 算法分析与设计1.1Prim算法构造最小生成树

1. 问题设G=(V,E)是无向联通带权图,E中的每一条边(u,v)的权为w(u,v);如果G的一个子图G1是一颗包含G中所有顶点的树,则称G1为G的生成树。生成树上各边权的总和称为该生成树的耗费。在G的所有生成树中,耗费最小的生成树称之为最小生成树。2. 解析3. 设计void Prime(int Vnum, int start){ for(i = 1; i <= ...

2020-03-01 14:00:12 263

原创 JAVA学习笔记——深拷贝、浅拷贝

Java中的对象拷贝指将一个对象的所有属性拷贝到另一个同类的对象中。Java中的对象拷贝主要分为深拷贝、浅拷贝、延迟拷贝浅拷贝1.对于数据类型是基本数据类型的成员变量,浅拷贝会直接进行值传递,将该属性值复制一份给新的对象。此时,对其中一个对象的该成员变量值进行修改,不会影响另一个对象拷贝得到的数据;2.对于数据类型是引用数据类型的成员变量,比如说成员变量是某个数组、某个类的对象等,那...

2019-11-28 18:28:23 128

原创 JAVA学习笔记——聚合、组合

组合、聚合都是整体与部分之间的关系,组合是强关系,聚合是弱关系组合:整体与部分与生俱来,整体产生的同时部分也产生了,部分的存在与否依 赖于整体。例如人和人体的器官聚合:整体的产生不会附带部分,而是通过外界传入产生部分。例如人和买来的电脑组合class Hand{....}class Person{ private Hand hand; ...

2019-11-28 15:51:26 134

原创 JAVA学习笔记——Javadoc的基本使用

一.Javadoc简介javadoc是Sun公司提供的一个技术,它从程序源代码中抽取类、方法、成员等注释形成一个和源代码配套的API帮助文档。也就是说,只要在编写程序时以一套特定的标签作注释,在程序编写完成后,通过Javadoc就可以同时形成程序的API文档了。二.Javadoc规范Javadoc一般写在类和方法的上面,用于解释类和方法的作用通常Javadoc分为三段:1.概述类或...

2019-11-11 19:53:10 158

原创 JAVA学习笔记—5种语言数组样例及对比

一、简单数组样例1.C2.Python3.Java4.C++5.PHP二、五种语言数组优缺点对比1.python和PHP的数组长度不固定,没有边界限制,不用定长,其他3种语言的数组长度不能改变2.定义数组时,C/C++直接定义数组类型和长度,语句简单方便;python则只需要声明一个list变量来存放数组,如arr = [];PHP创建数组时需要使用"array()"...

2019-10-21 22:13:19 85

原创 JAVA学习笔记—unicode和utf-8/16/32

1.Unicode是一个标准,为了防止各国编码标准的不同导致多语言混合的文本显示乱码等情况,Unicode为每种语言中的每个字符设定了统一并且唯一的二进制编码,来满足跨语言的文本转换、处理需求;2.utf-8是针对Unicode的可变长度字符编码,它将一个Unicode字符按照编号大小编码成1-6个字节,在英文字符较多的情况下能够节省一定的空间,而且它可以兼容ASCII编码;3.相比于utf-...

2019-09-19 19:51:21 163

原创 JAVA学习笔记—如何使用eclipse的Debug

1.如图所示的一段代码,在行号前双击鼠标左键添加断点(再次双击可以取消)2.在工具栏中找到Run→Debug As→1 Java Application3.跳转到调试试图,界面中会出现如下几个窗口,可以在变量窗口中监控各变量的值,在断点窗口中快速取消、启用各个断点4.Resume——执行代码直到遇到下一个断点Terminate——停止调试Step Into——单步执行,遇到子函数就进入并...

2019-09-15 12:03:28 79

原创 JAVA学习笔记—如何用eclipse创建Java文件

1.打开eclipse,在工具栏中选择File→New→Java Project创建新项目2.在弹出的窗口中为项目命名3.在项目文件目录下找到并右键src→New→Class 创建“类”4.在弹出的窗口中为“类”命名,要注意类名的与文件名一致;勾选下方红框标识处,系统会自动创建main方法5.接下来就可以编辑代码了6.编辑完成后,Ctrl+S保存,在工具栏中找到Run→Run As→1 ...

2019-09-15 11:13:27 1302

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除