自定义博客皮肤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.问题图的m着色问题。给定无向连通图G和m种颜色,用这些颜色给图的顶点着色,每个顶点一种颜色。如果要求G的每条边的两个顶点着不同颜色。给出所有可能的着色方案;如果不存在,则回答“NO”。2.解析在填写每一个顶点的颜色时检查与相邻已填顶点的颜色是否相同。如果不同,则填上;如果相同(冲突),则另选一种;如果已没有颜色可供选择,则回溯到上一顶点。重复这一过程,直到所有顶点的颜色都已填上。设计的思路就是设置一个检查函数,若两个节点相连并且颜色相同,则返回0,否则返回1。若返回值为1则记录下颜色,若为0

2020-06-01 21:29:37 645

原创 最优前缀码问题

1.问题给定字符集C={x1,x2,x3,…,xn}和每个字符集的频率f(xi),求关于C的一个最优前缀码。2.解析构造最优前缀码的贪心算法就是哈夫曼算法(Huffman)构建哈夫曼树的过程1.按照贪心算法每次找权值最小(即值最小)的两个数,构成孩子结点,并将这两个数据排除出这一堆数据之外2.由于哈弗曼树的数据全在叶子结点,所以把上述权值最小的两个数据构成父结点,然后再将父结点的权值放回上述数据,返回第一步,重复上述过程,直到所有的数据都变成哈夫曼树的叶子结点实例:此为哈夫曼数的构造方法,

2020-05-18 19:33:57 1312

原创 相容问题的贪心法

1.问题设S={1,2,…,n}为活动的集合,si和fi分别为活动i的开始和截止时间,i=1,2,…,n定义:活动i和j相容->si>=fj或sj>=fi,i!=j求S最大的两个两两相容的活动子集。2.解析方法:把活动按照截止时间从小到大排序,使得f1<=f2<=…<=fn,然后从前向后挑选,只要与前面选的活动相容,就可以把活动选入A。(1)选择活...

2020-05-05 19:47:27 136 1

原创 最长公共子序列的动态规划方案

1.问题定义:设X和Z是两个序列,其中X=<x1,x2,…,xm>Z=<z1,z2,…,zk>如果存在X的元素构成的按下标严格递增序列B,那么B是X的子序列,B含有的元素个数,称为子序列的长度定义:设X和Y是两个序列,如果Z既是X的子序列,也是Y的子序列,则称Z是X和Y的公共子序列。问题:最长公共子序列问题,给定序列X=<x1,x2,…,xm&gt...

2020-04-28 19:32:13 172

原创 矩阵链乘法-动态规划

1.问题给定一个n个矩阵的序列(矩阵链)<A1,A2,…,An>,用向量P<P0,P1…Pn>输入,求一种乘法的次序使得这个矩阵链的运行次数达到最小。解析我们已知m[i,j]为Ai到Aj采用最优的乘法次序得到的最小运行次数。m[i,j]=min{m[i,k]+m[k+1,j]+Pi-jPkPj},该命题为真,需要证明的话请自行查找相关资料。i<=k<j...

2020-04-20 20:23:34 289

原创 动态规划解决简单投资问题

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 {f k (x k ) + Fk -1 (x x k )},-k 2...

2020-04-13 21:54:00 347

原创 分治算法求第k小元素

1.问题用分治的算法求一个数组S[N]中第K小的元素。2.解析采取和快速算法相同的思路,但是结合分治的思想,选取恰当的基准值。找到基准值以后,再按照快速排序的方法进行查找就好了。3.设计int r = 5int r_group = ceil((high - low + 1)*1.0 / r);//ceil取上限,总共分为r_group个组 //计算每个分组中值,存于A[]最前面...

2020-04-07 11:32:07 1032

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

1.问题对于平面上给定的N个点,找出N个点钟距离最近的两个点。2.解析1.暴力法:每一个点都遍历平面上的所有点,计算出两点之间的距离,然后再找出所有数据中d最短的那两个点,复杂度为O(N^2)。思路简单,但是效率低下。2.分治法:将平面中的点以横坐标的中位数m作为分割线,将所有的点分割成两部分,并不断递归。计算每块小区域中点的最短距离dX,并找出其中的最短距离d。由此完成了第一部分的...

2020-03-29 20:28:35 665

原创 二分归并排序

1.问题对n个不同的数构成的数组A[1…n]进行排序,其中n=2^k,并求其复杂度。2.解析二分归并排序正如它的名字所说,先二分再排序,将一个数组不断二分成最小单元,再进行归并得到排序好的数组。如图所示。设计//二分的过程用递归的思路实现。void mergeSort(int arr[], int start, int end) { if (start >= end) r...

2020-03-23 21:22:06 122 1

原创 顺序查找和二分查找法复杂度的差异

1.问题写出两种检索算法:在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0。2.分析两种检索算法,我们选择1.顺序查找法。2.二分查找法。3.伪代码顺序查找法:for (int i = 0; i < n; i++) { if (T[i] == x) { printf("%d", i); flag = 1; }...

2020-03-15 19:40:08 847

原创 Dijkstra算法解决一个点到图上任意一点的最短路径

1. 问题Dijkstra算法解决一个点到图上任意一点的最短路径问题。2.分析Dijkstra算法的核心思路是贪心法,可以引入两个集合S和U。S的作用是记录已求出最短路径的顶点(以及相应的最短路径长度),而U则是记录还未求出最短路径的顶点(以及该顶点到起点s的距离)。先将第一个点如a放入集合S中,将其他点都放入到U中,从U中找到一个点x,使得ax路径最短,就把x放入S中,然后如果U中有...

2020-03-10 11:14:49 726

原创 Floyd最短路径问题

Floyd最短路径问题1.问题利用floyd算法来找到给定加权图中两个顶点间的最短路径。2.解析Floyd算法的思路就是引入第三个点K,如当AB间的距离为x时,只有引入点K使得AK+KB<AB时,才能缩短两点间的距离。所以只要引入两个矩阵,A记录两点间最短路径,P记录路径。再不断的更新A和P矩阵就可以了。如下图的推理:所以1->2 路径为1,2 长度为21-&gt...

2020-03-09 21:27:52 108

原创 算法分析与实践-作业1-2 Kruskal构造最小生成树

Kruskal构成最小生成树1.问题在一给定的无向图G = (V, E) 中,(u, v) 代表连接顶点 u 与顶点 v 的边(即),而 w(u, v) 代表此边的权重,若存在 T 为 E 的子集(即)且为无循环图,使得的 w(T) 最小,则此 T 为 G 的最小生成树。2.设计使用Kruskal,就是找权值最小的边并放入集合U中,若集合中的边不构成环,则继续找未在集合U内的权值最小的边...

2020-03-03 22:32:59 213

原创 算法分析与实践-作业1-1Prim构造最小生成树

Prim构造最小生成树1.问题在一给定的无向图G = (V, E) 中,(u, v) 代表连接顶点 u 与顶点 v 的边(即),而 w(u, v) 代表此边的权重,若存在 T 为 E 的子集(即)且为无循环图,使得的 w(T) 最小,则此 T 为 G 的最小生成树。2.设计这是一个简单的无向图,使用Prime方法构造最小生成树,就是取一个初始点放在集合U中,然后找到所有与它相连的边中权值...

2020-03-03 20:24:16 191

空空如也

空空如也

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

TA关注的人

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