自定义博客皮肤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≤n)表示顶点1的颜色x1,顶点2的颜色x2,…,顶点k的颜色xk。设计分析最坏时间复杂度:O

2021-06-06 13:19:05 147 1

原创 最优前缀编码

目录问题解析设计分析源码问题解析设计void create(){ for (int i = n; i < total; ++i) { selectMin(tree, i - 1); tree[s1].parent = tree[s2].parent = tree[i]; tree[i].left = tree[s1]; tree[i].right = tree[s2]; tree[i].weight = tree[s1].weigh

2021-06-06 12:32:30 108

原创 贪心算法 | 装载问题(0-1背包问题)

目录问题解析分析问题解析思路:轻者先装,直到再装任何集装箱将使轮船载重量超过C时停止。定理:对于任何正整数k,算法(轻者先装)对k个集装箱的实例得到最优解。 证明:(数学归纳法)分析时间复杂度:O(nlogn)...

2021-05-17 19:15:43 348

原创 动态规划 | 最长公共子序列、背包问题

目录1. 问题1.1 最长公共子序列1.2 背包问题2. 解析2.1 最长公共子序列2.2 背包问题3. 设计3.1 最长公共子序列3.2 背包问题4. 分析5. 源码1. 问题1.1 最长公共子序列1.2 背包问题2. 解析2.1 最长公共子序列示例:X=<C,B,D,A,C>Y=<C,A,D>m=0-5n=0-3初始化:算法1:2.2 背包问题3. 设计3.1 最长公共子序列3.2 背包问题示例:4. 分

2021-05-10 19:36:52 217

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

目录问题解析设计分析源码问题设A1, A2, …, An为n个矩阵的序列,其中Ai为Pi-1 * Pi阶矩阵,这个矩阵链的输入用向量P=<P0, P1, …, Pn>给出。给定向量P,确定一种乘法次序,使得基本运算的总次数达到最小。解析示例:n=6, P=<10, 5, 15, 20, 4, 6, 8>A1: 105A2: 515A3: 1520A4: 204A5: 46A6: 68(1) r=1m[1][1]=0m[2][2]=0…(2) r=2

2021-04-26 20:56:03 205

原创 动态规划 | 投资问题

目录问题解析设计分析源码问题一般性描述:设m万元,n项投资,函数fi(x)表示将x万元投入第i项项目所产生的效益,i=1,2,…,n,问:如何分配这m万元使投资总收益最大化?组合优化问题:假设分配给第i个项目的投入为xi万元,问题描述为:目标函数:max{ f1(x1) + f2(x2) + … + fn(xn) }约束条件:x1+x2+…+xn=m,xi∈N实例:解析递推公式:实例推导过程前1个项目:前2个项目:前3个项目:前4个项目:设计算法核心伪

2021-04-25 17:52:21 360

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

目录问题解析设计分析源码问题设 L 是 n 个元素的集合,从 L 中选取第 k 小的元素,其中1<=k<=n。这里的第 k 小元素是指,当 L 按从小到大排好序之后,排在第 k 个位置的元素。解析使用特定分治策略选择第k小元素的核心是将原问题通过五元分组排序划分为两个子问题,并不断减小问题规模直至找出答案。设计算法核心伪代码:void select(Integer[] a, int n, int k){ // 将a划分为 ⌈ |a| /5 ⌉ 组 // 排序选出每组中位

2021-04-20 16:49:10 135

原创 分治法解最近对问题

目录问题解析设计分析源码问题最近对问题要求在一个包含n个点的集合中,找出距离最近的两个点。解析求解最近对问题的蛮力算法是:分别计算每一对点之间的距离,然后找出距离最小的一对。其中,为了避免对同一对点计算两次距离,将范围压缩到(pi, pj)(i<j),时间效率为Θ(n2)。基于分治技术可优化最近对问题的解法,主要思想是将问题划分成两个规模减半的子问题。设计核心伪代码:double EfficientClosestPair(Point [] S, int left, int righ

2021-04-12 18:25:58 311

原创 二分归并排序算法

目录问题解析设计分析源码问题对n个不同的数构成的数组A[1,…,n]进行排序,其中n=2^k。解析归并排序算法的核心是通过递归的方式将待排序的数组划分为若干子数组,待子数组排序后再不断归并为有序数组。归并排序算法图解:设计核心伪代码:void MergeSort(int[] a, int l, int r){ int m=(l+r)/2; if(l<r){ MergeSort(a, l, m); MergeSort(1, m+1, r); Merge(a, l,

2021-03-29 16:20:16 232

原创 检索算法 | 顺序查找和二分查找

目录问题解析设计顺序查找算法核心伪代码二分查找算法核心伪代码分析源码问题使用两种检索算法求解有序数组中某元素的所在位置。解析有序数组最基本检索算法是顺序查找,又称线性查找,其思想是从数据结构线性表的一段开始顺序扫描,依次将扫描到的元素和给定值x相比较,若找到相等值则表示查找成功,若扫描结束仍未找到与给定值相等的元素,则表示线性表中不存在给定值。有序数组的另一种检索算法是二分查找,又称折半查找。用给定值x先与线性表中间元素进行比较,若相等则表示查找成功;否则,根据给定值x和中间值的比较结果在左右子

2021-03-22 15:53:55 674

原创 最短路径 | Floyd算法和Dijkstra算法

目录问题解析Floyd算法Dijkstra算法设计Floyd算法核心伪代码Dijkstra算法核心伪代码分析源码问题最短路径问题是图论中的经典算法问题,旨在寻找图中两结点之间的最短路径。解析Floyd算法Floyd算法可用于解决多源最短路径问题,其基本思想是:通过遍历1~n号顶点作为路径途径点,来不断更新任意两点之间的距离。最短距离矩阵:Dijkstra算法Dijkstra算法可用于解决单源最短路径问题,其基本思想是:每次找到离源点最近的一个顶点,然后以该顶点作为路径途径点,来不断更新

2021-03-15 19:46:35 374

原创 最小生成树 | Kruskal算法和Prim算法

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

2021-03-14 13:47:36 162

空空如也

空空如也

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

TA关注的人

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