- 博客(14)
- 收藏
- 关注
原创 图的m着色问题
1.问题图的m着色问题。给定无向连通图G和m种颜色,用这些颜色给图的顶点着色,每个顶点一种颜色。如果要求G的每条边的两个顶点着不同颜色。给出所有可能的着色方案;如果不存在,则回答“NO”。2.解析与“N皇后问题”一样。在填写每一个顶点的颜色时检查与相邻已填顶点的颜色是否相同。如果不同,则填上;如果相同(冲突),则另选一种;如果已没有颜色可供选择,则回溯到上一顶点。重复这一过程,直到所有顶点的颜色都已填上。3.设计核心伪代码isDiffColor(index)//判断填色是否符合 for
2021-06-01 14:24:09
200
原创 最优前缀码
1.问题最优前缀码问题给定字符集C={x1,x2,…,xn}和每个字符的频率f(xi),求关于C的一个最优前缀码解析2.解析构造最优前缀码的贪心算法就是哈夫曼算法哈夫曼编码:对于一颗具有n个叶子的哈夫曼树,若对树中的每个左分支赋予0,右分支赋予1,则从根到每个叶子的路径上,各分支的赋值分别构成一个二进制串,该二进制串就成为哈夫曼编码。哈夫曼树满足两条性质: 性质1 哈夫曼树是前缀编码。 性质2 哈夫曼树是最有前缀编码。对于包含n个数据字符的文件,分别以它们出现的次数为权值构造哈夫曼树,则
2021-05-24 16:17:03
924
原创 背包问题
1.问题整数规划问题,0-1 背包问题2.解析思路:轻者先装,直到再装任何集装箱将使轮船载重量超过 C 时停止。定理:对于任何正整数 k,算法(轻者先装)对 k 个集装箱的实例得到最优解。3.分析时间复杂度为O(nlogn)...
2021-05-18 08:16:44
172
2
原创 最长公共子序列和背包
1.问题最长公共子序列LCS给定序列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的最长公共子序列(2)xi≠yj,zk≠xi,那么Zk是Xi-1
2021-05-11 11:14:24
131
原创 矩阵链乘法
1.问题矩阵链乘法设 A1, A2, … , An 为 n 个矩阵的序列,其中 Ai 为 Pi-1 * Pi阶矩阵,这个矩阵链的输入用向量 P = < P0, P1, … , Pn> 给出。给定向量 P, 确定一种乘法次序,使得基本运算的总次数达到最小。2.解析动态规划法Ai…j:表示矩阵乘法的子问题;m[i,j]:表示得到乘积Ai…j所用最少基本运算次数;s[i,j]:表示得到乘积Ai…j所用最少基本运算次数最外层括号的位置。命题 m[i,j] = min{ m[i,
2021-04-27 20:27:45
174
原创 投资问题
1.问题投资问题一般性描述:设m元钱,n 项投资,函数 表示将 x 元投入第 i 项项目所产生的效益,i=1,2,…,n. 问:如何分配这m元钱,使得投资的总效益最高?组合优化问题:假设分配给第 i 个项目的钱数是 xi,问题描述为:2.解析递推公式设 Fk (x)表示 x 万元投给前 k 个项目的最大效益,k=1,2,…,n,x=1,2,…,m说明:第 k 步,前后共分配 x 万元,分配给第 k 个项目为 xkx-xk 万元,分配给前 k-1 个项目证明满足优化原则
2021-04-25 16:15:49
178
原创 特定分治策略
1.问题设 L 是 n 个元素的集合,从 L 中选取第 k 小的元素,其中 1<=k<=n.这里的第 k 小元素是指,当 L 按从小到大排好序之后,排在第 k 个位置的元素。2.解析解决该问题用到的是分治思想。下面引用老师的分析算法思想:k=|S1|+1,m*就是所要找的第k小的数;以m为划分标准后,比m小的有|S1|个,如果恰巧,k=|S1|+1,则m就是所要找到第k小的数k<=|S1|,归约为在S1中找第k1小的子问题,k1在子问题中的相对位置不变,即k1=k;k
2021-04-19 15:36:05
74
原创 最近点对
1.问题最近点对问题:在一个平面上随机分布着 n 个点,现给定 n 个点的坐标,要求给出最近的两个点之间的距离。2.解析1.暴力算法:在双重for暴力的情况下,该问题的时间复杂度为O(n²),当 n 的值不断增大时,这个方法处理起来就显得效率很低。2.分治法:分治法的思想是将平面上的点分成左右两半,分别求左右两半的最小距离,然后取一个最小值,整个问题的规模为n个点,将这n个点一分为二,就变成两个求解n/2个点规模下最近点对的距离问题,如此不断缩小规模,当变成两个点的规模下求解最近点对问题时,即
2021-04-12 16:27:41
1878
原创 二分归并排序
1.问题使用二分归并排序算法,对n个不同的数构成的数组A[1…n]进行排序,其中n=2^k2.解析二分归并排序是一种分治算法。这个算法不断地将一个数组分为两部分,分别对左子数组和右子数组排序,然后将两个数组合并为新的有序数组。算法步骤如下:(1) 分解:分解待排序的n个元素的数组成各具n/2个元素的两个子数组(把大问题分解成规模较小的子问题)(2) 解决:使用归并排序递归地排序两个子序列(把子问题独立求解的过程)(3) 合并:合并两个已排序的子序列以产生排序的答案(把所有子问题综合解的过
2021-03-29 19:03:45
918
原创 二分查找与插值查找
1.问题在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0。2.解析二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。二分查找算法基本思想:(1)确定排序好的数组的中间位置mid=(left+right)/2(left=0,right=n-1),将数组分为两部分。(2)用要T[mid]与查找的value进行比较; 若相等,则查
2021-03-22 15:36:42
258
原创 Floyd
1.问题用Floyd算法求解下图各个顶点的最短距离。写出Floyd算法的伪代码和给出距离矩阵(顶点之间的最短距离矩阵)。2.解析Floyd算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法。如果要找到两个顶点直接的最短路程,一般要引入第三个点(如k),即以k为中转点,路线为i->k->j,这样就可以缩短i到j的距离。有时可能不止有一个中转点,而是经过两个点或者更多点中转会更短,即路线为i->k1->k2->j或者i->k1-
2021-03-17 18:32:07
302
原创 Dijkstra
1.问题对于下图使用Dijkstra算法求由顶点a到顶点h的最短路径,按实验报告模板编写算法。2.解析Dijkstra算法是每次对所有可见点的路径长度进行排序后,选择一条最短的路径,这条路径就是对应顶点到源点的最短路径。可见点就是从源点开始按广度优先算法遍历顶点的过程中,搜索到的点。步骤如下1.声明一个数组dist来保存源点到各个顶点的最短距离和一个保存已经找到了最短路径的顶点的集合:T。初始时,原点start的路径权重被赋为0(dist[start] = 0)。求出其它点到start
2021-03-16 22:27:01
165
原创 最小生成树问题——Kruskal算法
最小生成树问题——Kruskal算法1.问题最小生成树问题设G=(V,E)是无向连通带权图,即一个网络。图中每一条边(u,v)的权是c[u][v],表示联通u与v的代价。如果G的子图T是一棵包含G的所有顶点的树,则称T为G的生成树。生成树上各边权的总和称为该生成树的耗费。在G的所有生成树中,耗费最小的生成树称为G的最小生成树:2.解析算法思想:贪心算法贪:每一步都要最优好:权重最小的边Kruskal算法:将森林合并成树首先把所有的边按照权值先从小到大排列,接着按照顺序选取每条
2021-03-09 20:58:13
422
原创 最小生成树问题——Prim算法
最小生成树问题——Prim算法1.问题最小生成树问题设G=(V,E)是无向连通带权图,即一个网络。图中每一条边(u,v)的权是c[u][v],表示联通u与v的代价。如果G的子图T是一棵包含G的所有顶点的树,则称T为G的生成树。生成树上各边权的总和称为该生成树的耗费。在G的所有生成树中,耗费最小的生成树称为G的最小生成树:2.解析算法思想:贪心算法贪:每一步都要最优好:权重最小的边Prim算法基本思想:让一棵小树长大以顶点为主导地位,从起始顶点出发,通过选择当前可用的最小权值
2021-03-09 20:43:08
656
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人