自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 图的m着色问题

问题图的m着色问题。给定无向连通图G和m种颜色,用这些颜色给图的顶点着色,每个顶点一种颜色。如果要求G的每条边的两个顶点着不同颜色。给出所有可能的着色方案;如果不存在,则回答“NO”。解析使用回溯算法来解决问题。设G有n个顶点,将顶点编号为1, 2, … n,则搜索空间为深度n的m叉完全树,将颜色编号为1,2, .,m,结点<x1,x2…,xk >(x1,x2…,xk∈{1,…,m},1≤k≤m)表示顶点1的颜色x1,顶点2的颜色x2,…,顶点k的颜色xk设计//判断..

2021-05-31 18:37:39 135

原创 最优前缀编码

问题代码(码字):Q {001,00,010,01}表示字符 a, b, c, d同一序列:0100001产生两种译码(产生歧义):01 00 001; 010 00 01二元前缀码:任何字符的代码不能作为其他字符代码的前缀利用二元前缀码译码:从第一个字符开始一次读入每个字符(0 或 1),如果发 现读到的子串与某个码字相等,就将这个子串译作对应的码字;然后从下一个字符开始继续这个过程,直到读完输入的字符串为止。二元前缀编码存储:二叉树结构,每个字符作为树叶,对应这个字符的前缀码看作根到这片..

2021-05-31 14:27:23 887

原创 装载(0-1背包)问题

问题0-1背包问题:解析思路:轻者先装,直到再装任何集装箱将使轮船载重量超过C时停止。定理:对于任何正整数k,算法(轻者先装)对k个集装箱的实例得到最优解。证明:(数学归纳法)(1)k=1,只有1个集装箱,其重量小于C。任何装法都只有一种方式,因此都是最优解,因此轻者先装也是最优解。(2)归纳假设:假设算法对于规模为k的输入都能得到最优解。考虑规模为k+1的输入,N={1,2,…,k+1},W={w1,w2,…,wk+1}是集装箱重量,w1≤w2≤…≤wk+1。从N中拿掉最轻的集装.

2021-05-31 14:04:31 358

原创 LCS算法

问题解析举例:X=<B,D,C,A,B,A>Y=<A,B,C,B,D,A,B>设计分析时间复杂度:T(n)=O(mn)源码:https://github.com/DicHui/DicHui/tree/main

2021-05-17 14:37:36 74

原创 矩阵链乘法

问题解析设计void solve(){// 矩阵的个数cin >> n;// 连乘数如果为三个矩阵 3 x 4, 4 x 5, 5 x 6// p就为 3 4 5 6for(int i = 0; i < n + 1; ++i) cin >> p[i];// 初始化第单个矩阵连乘为0for(int i = 0; i <= n; ++i) m[i][i] = 0;// 矩阵规模大小for(int r = 2; r <= n; ++r){/.

2021-05-10 14:19:17 62

原创 算法——投资问题

问题解析设计int plmax(int a[X][Y],int b[X][Y],int x,int y)//X为投资金额,Y为数量{for (int i=1;i<=y;i++){for (int j=0;j<=x;j++){a[i][j]=0;for (int k=0;k<=j;k++){if (a[i][j]<b[i][k]+a[i-1][j-k])a[i][j]=b[i][k]+a[i-1][j-k];}}}return a[y..

2021-05-10 14:00:08 114

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

1. 问题选第k小元素:特定分治策略。2. 解析将数组分为五个一组,最后不够5个就单列一组,对每一小组进行排序找出每组的中位数,将每个小组的中位数取出,重复这个操作,直至只剩最后一个数字。以这个数字作为pivot利用类似快速排序的方法,将小于pivot的数全部放到其左边,大于pivot的值全部放到其右边,再将此时pivot的下标与k做对比,若此时pivot的下标大于k,则对其左边的数字继续重复之前的动作,若大于k则对右半部分重复,依次递归,直至找到第k小的数。3. 设计4. 分析平均时间复杂度:

2021-04-19 19:06:06 105

原创 最近对问题

问题n个点在公共空间中,求出所有点对的欧几里得距离最小的点对。解析当2<=n<=3,通过蛮力算法求解;当n>3,对所有的点按照坐标从小到大排序,利用点集在坐标方向的中位数m,在该处做一条垂线,将点集分为n/2和n/2两个子集P1和Pr,对左右两个部分分别求最近点对的距离d,然后进行合并。最近距离不一定存在于两个集合中,可能一个点在P1,一个点在Pr,而这两点间距离小于d。设计double partition(node p[],int left,int right){//2&.

2021-04-12 16:34:06 148

原创 算法—二分归并

问题二分归并排序:对n个不同的数构成的数组A[1…n]进行排序,其中n=2^k解析该算法采用分治策略,先将数组两两拆分,然后分别排序再归并。设计void MergeSort(int a[], int b[], int start, int end){int mid;if(start < end){mid = start + (end-start) / 2;MergeSort(a, b, start, mid);MergeSort(a, b, mid+1, end);..

2021-03-30 10:23:06 167

原创 顺序查找和二分查找

问题写出两种检索算法:在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0.解析顺序查找:在一个线性表中,按照从前往后或者从后往前的顺序依次查找,如果查找到关键字和给定值相等,则返回给定值的位置,查找成功;如果查找值最后一个元素仍未找到,则查找失败。对分查找:首先将关键字与有序数组内处于中间位置的元素进行比较,如果中间位置上的元素内的数值与查找键不同,根据数组元素的有序性,就可确定应该在数组的前半部分还是后半部分继续进行查找;在新确定的范围内,继续.

2021-03-22 18:00:33 597

原创 Floyd算法和Dijkstra算法

问题用Floyd算法求解下图各个顶点的最短距离。写出Floyd算法的伪代码和给出距离矩阵(顶点之间的最短距离矩阵).对于下图使用Dijkstra算法求由顶点a到顶点h的最短路径.解析Floyd:假设有向图G=(V,E)采用邻接矩阵存储。设置一个二维数组A用于存放当前顶点之间的最短路径长度,分量A[i][j]表示当前顶点i到j的最短路径长度。递推产生一个矩阵序列:A0–>A1->-A2–>…Ak–>…An-1A[i][j]:i–>j的路径上所经过的顶点编号不大于.

2021-03-21 19:26:32 473

原创 Prim算法和Kruskal算法浅析

Prim算法和Kruskal算法浅析问题描述举一个实例,画出采用Prim算法构造最小生成树的过程举一个实例,画出采用Kruskal算法构造最小生成树的过程理论解析Prim:初始化:向空结果树T=(Vt,Et)中添加图G=(V,E)的任一顶点u0,使Vt={ u0 },Et为空集;循环(直到Vt=V):从图G中选择满足{(u,v)| u∈Vt,v∈V-Vt}且具有最小权值的边(u,v),并置Vt=Vt∪{v},Et=Et∪{(u,v)}。Kruskal:初始化:Vt=V,Et=空集。及使每个

2021-03-13 15:37:21 3281

空空如也

空空如也

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

TA关注的人

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