- 博客(12)
- 收藏
- 关注
原创 图的m着色问题
一:问题给定无向连通图G和m种不同的颜色。用这些颜色为图G的各顶点着色,每个顶点着一种颜色,是否有一种着色法使G中任意相邻的2个顶点着不同颜色?二:解析color[n]存储n个顶点的着色方案,可以选择的颜色为1到mt=1对当前第t个顶点开始着色:若t>n 则已求得一个解,输出着色方案即可否则,依次对顶点t着色1-m,若t与所有其它相邻顶点无颜色冲突,则继续为下一顶点着色;否则,回溯,测试下一颜色。三:设计void graphcolor(int n,int m,int c[][10
2021-06-23 04:43:08 277
原创 求最优前缀码
一:问题给定字符集C={x1,x2,…,xn}和每个字符的频率f(xi),求关于C的一个最优前缀码二:解析依次读人文件的二进制码,从哈夫曼树的根结点出发,若当前读入0,则走向左孩子,否则走向右孩子。三:设计//在前k个结点中选择权值最小和次小的根结点,其序号分别为p1和p2void SelectMin(HuffmanTree T, int k, int* p1, int* p2) {temp x[m]; //x向量为temp类型的向量int i, j;fo
2021-06-23 04:15:25 760
原创 01背包问题
一:问题01背包问题二:解析01背包问题:状态转移方程:f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}假设:n=5, C=13, w={4,5,4,3,10}, v={9,10,9,2,24}P[2,5]的含义是考虑前两个物品,装体积为5 的价值是10,背包体积就减少4,无法再装下第一个物品。也可以放弃第二个物品装第一个物品,价值是9,最大的是10。所以装第二个物品。P[2,9]的含义是考虑前两个物品,装体积为5 的价值是10,背包体积就减少4,还能再
2021-06-23 03:26:29 101
原创 2021-06-23
一:问题矩阵链乘法问题:给定 n 个矩阵的链<A1, A2, A3, …, An>,矩阵 Ai 的规模为Pi-1Pi(0<=i<=n)。求完全括号化方案,使得计算乘积A1A2…An所需要标量的乘法次数最少。输入:第一行 N ( 1<=N<=100 ),代表矩阵个数。第二行有 N+1 个数,分别为 A1 、 A2 … An+1 ( 1<=Ak<=2000 ), Ak 和 Ak+1 代表第 k 个矩阵是个 Ak X Ak+1 形的。输出:第一行 M ,
2021-06-23 03:13:33 154
原创 LCS,01背包问题
一:问题LCS问题和背包问题二:解析LCS问题:这是一个动态规划的题目。对于可用动态规划求解的问题,有最优子结构特点最优子结构:设 X=(x1,x2,…xn) 和 Y={y1,y2,…ym} 是两个序列,将 X 和 Y 的最长公共子序列记为LCS(X,Y)找出LCS(X,Y)就是一个最优化问题。因为,我们需要找到X 和 Y中最长的那个公共子序列。而要找X 和 Y的LCS,首先考虑X的最后一个元素和Y的最后一个元素。1)如果 xn=ym,即X的最后一个元素与Y的最后一个元素相同,这说明该元素一
2021-06-23 02:15:04 82
原创 动态规划 投资问题
一:问题:问题的一般性描述:设有 m 元钱,n 项投资,函数 fi(x) 表示将 x 元投入第 i 项项目所产生的效益,i=1,2,…,n.问:如何分配这 m 元钱,使得投资的总效益最高?目标函数:max { f1(x1) + f2(x2)+ … + fn(xn)},约束条件:x1 + x2 + … + xn = m , xi ∈ N.二:解析设 Fk (x)表示 x 万元投给前 k 个项目的最大效益,k=1,2,…,n,x=1,2,…,m说明:第 k 步,前后共分配 x 万元,• 分配
2021-05-24 23:13:55 164
原创 找出输入数字中第k个元素,从小到大
一:问题用分治法找出数组中第K个元素,从小到大。二;解析使用快速排序,来把一个串(list)分为两个子串(sub-lists)。具体算法描述如下:1.从数列中挑出一个元素,称为 “基准”(pivot),这里我们通常都会选择第一个元素作为prvot;2.重新排序数列,将比基准值小的所有元素放在基准前面,比基准值大的所有元素放在基准的后面(相同的数可以到任一边)。这样操作完成后,该基准就处于新数列的中间位置,即将数列分成了两部分。这个操作称为分区(partition)操作;3.递归地(recursi
2021-04-26 15:54:33 156
原创 分治法最近对
1.问题分治法最近对问题2.解析用分治法解决最近点对问题,就是将一个问题分解两个子问题,然后递归处理子问题,然后合并。可能两个点在每个子问题中,也可能两个点分别在两个子问题中,就这两种情况。则基本过程为:找一条中垂线m(坐位S集合x坐标的中位数)把n个元素分成左右两部分元素,然后分别求得两边的最短距离d1,d2,然后取两者中的最小者记为d,在中线两边分别取d的距离,记录该距离范围内点的个数,中线左边有L个元素,右边有R个元素,分别将两边的点按y坐标升序排列,在左边集合中每一个点,找右边集合的点,找到与
2021-04-19 14:09:31 156
原创 二分归并排序c++
1.问题二分归并排序:对n个不同的数构成的数组A[1…n]进行排序,其中n=2^k2.解析把数组分为两部分,从中间隔开,把这两部分分别存入left,right数组中,对两个数组分别进行遍历,在遍历的同时比较两个数组中的值。这个步骤进行完后,数组中的元素不一定是按从小到大的顺序。只是其中一部分排好了序。这时候需要对数组进行递归,直到拆分的数组长度已经是1,就是只含有一个数。左右只含有一个元素,进行大小比较,依次再向上递归。可以得到排好序的数组了。3.设计//定义MergeSort函数,参数为数组a,
2021-04-12 16:24:26 389
原创 使用二分查找和顺序查找检索数组中的元素
1.问题在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0.按实验模板编写,“分析”部分仅给出复杂度结果即可。2.解析方法一:顺序查找,从数组的第一个开始查找,将每个数与x比较,找到则输出x的下标,否则输出0.方法二:二分查找,将x与数组的中间值比较,如果相等则找到,如果不相等,不管大于还是小于,都缩小了查找范围,直到找到下标j,若没有则输出0.3.设计//顺序查找int Search(int T[],int n,int x)// 输入有序数组
2021-03-22 16:17:27 968
原创 实验2:两点间最短路径
1.问题用Floyd算法求解下图各个顶点的最短距离。使用Dijkstra算法求由顶点a到顶点h的最短路径2.解析问题1:需要一个数据结构来存储图的信息,用4*4矩阵存储它。将矩阵命名为e, 比如 1 号城市到 2 号城市的路程为 2,则设 e[1][2]的值为 2。2 号城市无法到达 4 号城市,则设置 e[2][4]的值为 ∞。另外此处约定一个城市自己是到自己的也是 0,例如 e[1][1]为 0.若e[i][k]+e[k][j]<e[i][j],则满足条件。2.初始化出发节点到各个节
2021-03-21 19:38:18 263
原创 prim和kruskal解决最小生成树
《算法分析与设计》实验11.问题如何用prim和Kruskal算法来解决最小生成树?具体步骤是什么?2.解析首先是图,图有n个顶点,n条边,每条边有自己的权重,最小生成图有n个点,n-1条边,所有边加起来权重最小。且任何两点之间有路径。Prim算法:首先选择一条权值最小的边,与这条边两端点相连的边考虑进来,选择其中最小且断点未加入最小生成树中的,一直进行,直到所有点都加入了最小生成树中。Kruskal:从边开始加,把图所有的边按权重排序,把边加入最小生成树中,加这条边并不会和已经形成的边构成回
2021-03-14 22:08:19 108
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人