自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 最长公共子序列

1、问题设X和Y是两个序列,其中X=<x1,x2,…,xm>,Y=<y1,y2,…,yj>,求X和Y的最长公共子序列。2、解析X=<x1,x2,…,xm>Y=<y1,y2,…,yj>Z=<z1,z2,…,zk>如果Zk是Xi和Yj的最长公共子序列:引进一个二维数组c[][],用c[i][j]记录X[i]与Y[j] 的LCS 的长度,b[i][j]记录c[i][j]是通过哪一个子问题的值求得的,以决定搜索的方向。我们是自底向上进行

2021-06-22 19:09:41 309

原创 动态规划求解投资问题

1、问题2、解析动态规划问题一般分为两类:中间状态类和累积状态类。前者的参数是相同的,后者的参数不同,而且往往需要一个变量来进行遍历。这个问题以及最少货币数的问题都属于后者,最长公共子序列和最小路径和都属于前者。3、设计 for(int i = 2; i <= ROWS; i++){//迭代计算第2个项目到最后一个项目 for(int j = 1; j <= COLS; j++){ F[i][j] = INT_MIN;

2021-06-22 19:08:43 223

原创 分治算法解决最近对问题

1、问题设P1(x1, y1),P2(x2, y2),P3(x3, y3), P4(x4, y4) …,是平面上n个散列点构成的集合S,最近对问题就是找出集合S中距离最近的点对。2、解析设P1,P2,P3,…,Pn是平面上n个点构成的集合S,解决问题之前,假定这些点都是按照它们的x轴坐标升序排列的。我们可以画一条垂直线x=c,将这些点分为两个包含n/2个点的子集S1、S2,分别位于直线x=c的两侧。遵循分治的思想,分别递归的求出S1、S2的最近对,比如d1、d2,并设d=min{d1,d2}。此时d

2021-06-22 19:07:35 249

原创 检索算法

1、问题写出两种检索算法:在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0.2、解析按顺序普通查找:通过遍历数组一个个查找。二分检索算法:因为数组T的有序性,且已知X的值,我们可以不断二分从而缩小T[i] == x可以存在的区间。3、设计//普通查找 预先定义一个数组 int t[100];for(i=0;i<n;i++{ if(t[i]==x){ return i; } else return 0

2021-06-22 19:05:54 77

原创 圆排列问题

1、问题圆排列问题:给定n个圆的半径序列,将它们放到矩形框中,各圆与矩形底边相切,求具有最小排列长度的圆排列。例如:当n=3,且所给的3个圆半径分别为1,1,2时,这3个圆的最小长度的圆排列 最小长度为2+4根号2.2、解析圆的摆放位置不同,得到的结果可能不同,所以这是一个排列问题,在回溯里面需要添加全排列。要得到圆排列的长度,需要知道最右边圆心的横坐标,+它的半径+第一个圆的半径【根据算法的约定,第一个圆的圆心横坐标为0,代码中有标记】根据递归的思想,第n个圆的圆心横坐标=与他相切的圆的横坐标

2020-06-16 14:46:05 359

原创 《算法设计与分析基础》读书笔记

一、算法与问题算法求解基本步骤: 1.理解问题:最基础也是重要的一步,决定着算法的成败 2.了解计算设备的性能:根据不同计算设备的性能往往需要不同的算法策略(顺序算法、并行算法) 3.在精确解法和近似解间做选择:对于一些无法在目前或者在时间限制内找到精确解法的问题,我们就必须在两者之间做出选择 4.确定适当的数据结构:我们都知道程序=算法+数据结构 5.选择恰当的算法:即根据问题和数据结构本身选择恰当的算法,可以是成熟的,也可以是自己开创的 6.详

2020-06-09 21:55:12 435

原创 图的m着色问题

1、问题给定无向连通图G 和m 种不同的颜色。用这些颜色为图G的各顶点着色,每个顶点着一种颜色。如果有一种着色法使G 中每条边的2 个顶点着不同颜色,则称这个图是m 可着色的。给出所有可能的着色方案;如果不存在,则回答“NO”.2、解析回溯法3、设计void BackTrack(int i){ if(i > pointnum) { sum += 1; printf("方法 %d : ", sum); for(int j = 1

2020-06-01 20:00:20 184

原创 相容问题——贪心法

1、问题有n项活动申请使用同一个礼堂,每项活动有一个开始时间和一个截止时间。如果任何两个活动不能同时举行,问如何选择这些活动,从而使得被安排的活动数量达到最多。设S={1,2,…,n}为活动的集合,si和fi分别为活动i的开始和截止时间,i=1,2,…,n定义:活动i和j相容<==>si≥fj或sj≥fi,i≠j求S最大的两两相容的活动子集A。2、解析把活动按照截止时间从小到大排序,使得f1<=f2<=…<=fn ,然后从前向后挑选,只要与前面选的活动相容,就可以把

2020-05-25 21:29:04 322

原创 矩阵链乘法

1、问题给定n个矩阵的链<A1,A2,…,An>,矩阵Ai的规模为pi-1*pi(1 =< i =<n),求完全括号化方案,使得计算乘积A1A2…An所需标量乘法次数最少。2、解析动态规划方法的第一步是寻找最优子结构,然后就可以利用这种子结构从子问题的最优解构造出原问题的最优解。现在给出本问题的最优子结构。假设AiAi+1…Aj的最优括号化方案的分割点在Ak和Ak+1之间。那么,继续对“前缀”子链AiAi+1…Ak进行括号化,我们应该直接采用独立求解它时所得的最优方案。对Ak+

2020-05-19 12:22:31 331

原创 最优前缀编码

1、问题由哈夫曼树求得的编码为最优前缀码。每个叶子表示的字符的编码,就是从根到叶子的路径上的标号依次相连所形成的编码,显然这就是该字符的最优前缀码。所谓前缀码是指,对字符集进行编码时,要求字符集中任一字符的编码都不是其它字符的编码的前缀,比如常见的等长编码就是前缀码。所谓最优前缀码是指,平均码长或文件总长最小的前缀编码称为最优的前缀码(这里的平均码长相当于码长的期望值)。1.每个叶子字符ci的码长恰为从根到该叶子的路径长度li,平均码长(或文件总长)又是二叉树的带权路径长度WPL.而哈夫曼树是WPL最小

2020-05-18 22:04:07 4239

原创 选第k小元素:特定分治策略

1、问题n(1≤n≤100)个正整数(无序的)中,找出第k(k≤n)小的数。注意,第k小的数意味着从小到大排在第k位置的数。2、解析3、设计int Select(int s[], int low, int high, int k) { //得到中间数的下标   int i = partition(s, low, high);       //j为左区间长度  int j=i-low+1; //位置大就在左区间找,否则就在右区间找    if (j == k)      ret

2020-05-18 21:17:24 215

原创 二分归并排序

1、问题对n个不同的数构成的数组A[1…n]进行排序,其中n=2^k思路:归并排序是多次将相邻两个或两个以上的有序表合并成一个新的有序表。最简单的归并是将两个有序的子表合并成一个有序的表,即二分归并排序。2、解析设待排序表有10个记录,其关键字分别为{18,2,20,34,12,32,6,16,1,5}。采用二分归并排序方法排序过程:3、设计void MergeSort(RecType R[],int n) { int length; for(length=1;length<n

2020-05-18 20:38:19 304

原创 使用Dijkstra算法求最短路径

1、问题给定一个带权有向图G与源点v,求从v到G中其他顶点的最短路径,并限定各边上的权值大于或等于0.对于下图使用Dijkstra算法求由顶点a到顶点h的最短路径。2、解析设G=(V,E)是一个带权有向图,把图中顶点集合V分成两组:①第1组为已求出最短路径的顶点集合(用S表示,初始时S中只有一个源点,以后每求得一条最短路径v,…,u,就将u加入到集合S中,直到全部顶点都加入到S中,算法...

2020-03-10 18:49:21 1199

原创 用Floyd算法求解各个顶点的最短距离

1、问题通过一个图的权值矩阵求出它的每两点间的最短路径矩阵。求解下图各个顶点的最短距离。2、解析

2020-03-10 18:38:12 482

空空如也

空空如也

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

TA关注的人

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