- 博客(10)
- 收藏
- 关注
原创 作业12 图的m着色问题
1.问题:图的m着色问题。给定无向连通图G和m种颜色,用这些颜色给图的顶点着色,每个顶点一种颜色。如果要求G的每条边的两个顶点着不同颜色。给出所有可能的着色方案;如果不存在,则回答“NO”。2.解析:在填写每一个顶点的颜色时检查与相邻已填顶点的颜色是否相同。如果不同,则填上;如果相同(冲突),则另选一种;如果已没有颜色可供选择,则回溯到上一顶点。重复这一过程,直到所有顶点的颜色都已填上。使用color[n],大小为n,n代表顶点,里面的值代表这个顶点放的是哪种颜色。Traceback(t)的t
2021-06-23 01:44:49 211
原创 作业11 最优前缀编码
1.问题:代码(码字):Q {001,00,010,01}表示字符 a, b, c, d同一序列:0100001产生两种译码(产生歧义):01 00 001; 010 00 01**二元前缀码:**任何字符的代码不能作为其他字符代码的前缀**利用二元前缀码译码:**从第一个字符开始一次读入每个字符(0 或 1),如果发现读到的子串与某个码字相等,就将这个子串译作对应的码字;然后从下一个字符开始继续这个过程,直到读完输入的字符串为止。**二元前缀编码存储:**二叉树结构,每个字符作为树
2021-06-23 01:40:40 458
原创 作业10 装在问题(0-1背包问题)
1.问题:整数规划问题,0-1 背包问题2.解析: 思路:轻者先装,直到再装任何集装箱将使轮船载重量超过 C 时停止。 定理:对于任何正整数K,算法(轻者先装)对K个集装箱的实列得到最优解。 证明:(数学归纳法)k=1,只有 1 个集装箱,其重量小于 C。任何装法都只有一种方式,因此都是最优解,因此轻者先装也是最优解。归纳假设:假设算法对于规模为 k 的输入都能得到最优解。考虑规模为 k+1 的输入, 是集装箱重量,从 N 中拿掉最轻的集装箱,得到 k 规模的输入:根据归纳假设
2021-06-23 01:31:13 88
原创 作业9 LCS算法和背包算法
1.问题:定义设 X 和 Z 是两个序列,其中X=<x1,x2,…,xm>Z=<z1,z2,…,zk>如果存在 X 的元素构成的按下标严格递增序列<x1,x2,…,xm>=,使那么 Z 是 X 的子序列,Z 含有的元素个数,称为子序列的长度。定义设 X 和 Y 是两个序列,如果 Z 既是 X 的子序列,也是 Y 的子序列,则称Z 是 X 和 Y 的公共子序列。实例:X=<A,B,C,B,D,A,B>Y=<B,D,C,A,B,
2021-06-23 01:18:18 114
原创 作业8 矩阵链乘法
1.问题:设A1,A2,…,An为n个矩阵序列,其中Ai为Pi-1*Pi价矩阵,这个矩阵的输入用向量P=<P0,P1,…,Pn>给出。给定向量P,确定一种乘法次序,使得基本运算的总次数达到最小。2.解析:7.4.2.1. 蛮力法枚举所有可能的乘法次序,针对每种次序计算基本运算的次数,从中找出具有最小运算次数的乘法次序,每一种乘法次序对应了 种在n个项中加n-1 对括号。命题:加n对括号的方法数是一个Catalan数,定义:n对括号的合法匹配(通过栈的描述):初始状态,栈为空。从左至
2021-06-23 01:10:03 265
原创 作业7 投资问题
1.问题:一般描述:设m元钱,n项投资,函数表示将x元投入第i项项目所产生的效益,i=1,2,3,…,n.问:如何分配着m元钱,使得投资的总效益最高?结合优化问题:假设分配第i项目的钱数是xi,问题描述为:约束条件 目标函数实列:投资x(万元)效益万元0000011102202125010213131030224141532235152040242.解析:7.3.2.1
2021-06-23 00:51:21 248
原创 作业6 选第K小元素
1.问题:在一个数组中找到第k小的元素并输出。2.解析:3.设计:int select(int a[], int low, int high, int k){ int middle; middle = split(a, low, high); if (middle == k) return a[k]; else if (middle < k) return select(a, middle + 1, high, k); else return select(a, l
2021-06-23 00:32:48 104
原创 作业5 最近对问题
1.问题:在数组P中存储平面上的n>=2个点,并且按照这些点的x轴坐标升序排列,数组Q中存储与P相同的点,只是它按照这些点的y 轴坐标升序排序,得出最近点之间的欧几里得距离。2.解析:1)蛮力算法:当2≤n≤3时,问题就可以通过蛮力算法解决。2)分治算法:当n>3时,可以利用点集在x轴方向上的中位数m,在该处作一条垂线,将点集分成大小分别为⌈n/2⌉和⌊n/2⌋的两个子集P1和Pr。即使得其中⌈n/2⌉个点位于显得左边或线上,⌊n/2⌋个点位于线的右边或线上。然后就可以通过递归求解子问
2021-06-23 00:27:58 74
原创 作业4 二分归并排序
1.问题:对n个不同的数构成的数组A[1…n]进行排序,其中n=2^k2.解析:归并排序是一种基于“归并”思想的排序方法,二分归并的原理是,将序列两两分组,将序列归并为n/2个组,组内单独排序,然后将这些组再两两归并,生成n/4个组,依次类推。实现排序3.设计:void Mergesort(int l,int r){ int mid = (l + r) >> 1; if(r - l + 1 <= 1){ // 如果序列长度<=1的话那么这个序列必然是有序的
2021-06-23 00:25:01 80
原创 作业3 两种检索算法
1.问题:写出两种检索算法:在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0.2.解析:(1) 顺序查找顺序查找类似数组遍历,从数组的第一个元素开始,检查数组的每一个元素,以便确定是否有查找的数据。(2) 二分查找二分查找适用于顺序存储结构且关键字有序排列的情况。首先,将数组中间位置记录的关键字与查找关键字比较,若两者相等,则查找成功。否则利用中间位置记录将数组分为前后两个子数组,若中间位置记录的关键字大于查找关键字,则查找前一子数组,否则查找
2021-06-23 00:08:45 77
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人