![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
文章平均质量分 64
zhanle_huang
喜欢编程、对编程有着自己的热情,目前是前端开发为主,平时喜欢研究一些自己觉得好玩的代码
展开
-
采用动态规划来处理有向无环图最短路径问题,c++实现
如图,在一个无环有向图中,找到起点0到终点的最短路径。原创 2023-06-06 11:53:33 · 579 阅读 · 0 评论 -
动态规划求解最长公共子序列通俗易懂,c++实现
最后取结果的时候,从后往回取,状态是1的则表示符合最长公共子序列,如果是2左移(左移是因为我们在前面设置条件的时候设置了关系),否则上移。ps:本文算法不是最优写法,只是为了容易理解,把代码写的更加易读和输出了计算过程的信息。原创 2023-05-05 14:06:07 · 519 阅读 · 0 评论 -
超容易理解的方式去解释动态规划之01背包问题,c++实现
动态规划之01背包问题,c++实现问题描述算法实现结果问题描述01背包问题问题分析动态规划法分析:1.划分子问题,2.得出子问题的递推公式,3.填表划分子问题用数组V[n][n]存储价值和重量关系,行表示物体,列表示重量第0行和第0列设置为0,没有物体的时候价值没0,重量为0的时候物体无论多少价值也为0如果第i个物体重量小于当前总重量j,则取前i-1和第i个物体组合的最优值,否则该物体不可以放进背包,取前i-1个物体的最优价值递推公式不装入背包时:V(i-1, j) j <原创 2022-04-08 18:24:00 · 1560 阅读 · 0 评论 -
动态规划求序列的最长递增子序列,c++实现
动态规划求序列的最长递增子序列,c++实现描述算法实现结果输出描述求序列的最长递增子序列问题剖析划分子问题只有一个序列的时候,就是序列本身,且长度为1序列长度大于2的时候,用L[n]数组存放每个子问题的最长长度,每i个序列位置的处理,都以其前i-1个已经找到的当前最长比较最后一位是否符合递增符合,并且其长度L[i-1]+1大于子问题目前的最大长度,则长度L[i-1]+1,L[i] = L[i-1]+1, 使用arr[i][n]存放每一个子问题的最长序列递推公式长度为1时,L(1原创 2022-04-08 10:24:52 · 1099 阅读 · 0 评论 -
采用动态规划思维求解数塔问题,c++实现
采用动态规划思维求解数塔问题,c++实现数塔问题算法实现结果数塔问题问题描述: 加粗样式从塔顶往下走,如何走过的步数最大问题分析:数塔游戏(5层)从塔顶到塔底,走过的值最大从第一层开始,往左走还是往右走,变化两个4层他的问题,因此改问题存在子问题重叠性质由于该问题要求走过的值最大,因此,该问题存在要求最优解,因此符合动态规划用法递归求解过程:塔数据用二维数组存储d[5][5],规划表格用maxD[5][5]存储(用来存储子问题的解),该结构是下三角结构划分子问题:第1层走左还原创 2022-03-30 16:53:40 · 4472 阅读 · 0 评论 -
数组排序之堆排序,c++实现
数组排序之堆排序,c++实现问题描述算法实现结果如下问题描述采用堆排序的方法去排序一个数组{47, 35, 26, 20, 18, 7, 13, 10}数组对应堆的图例,根节点大于左右孩子节点分析:组建堆,第i个节点和其左右孩子分别对应第2i + 1和2i + 2下标的数据如何确定堆有几层?如下数组的最后一个值的下标为n其父节点为i,所以存在关系n = 2*i+1 => i = (n-1)/2即第0i个节点是有子节点,i+1n个节点是叶子节点首次建堆处理,把树处理层,根节点大于或原创 2022-03-22 17:41:31 · 1849 阅读 · 0 评论 -
减治法应用在插入排序算法
减治法应用在插入排序算法问题描述算法实现问题描述采用减治法进行插入排序减治法是将问题分割成子问题,子问题的解跟原问题存在某种关系,(划分为有序区和无序区)初始时,将第0个位置设置为哨兵(防止越界)划分有序区和无序区,第1个位置为有序区,其余为无序区从第二个位置开始,在有序区中查找位置插入算法实现// # 1. 减治法排序之插入排序// # 2. 初始时,将第0个位置设置为哨兵(防止越界)// # 3. 划分有序区和无序区,第1个位置为有序区,其余为无序区// # 4. 从第二个位原创 2022-03-21 17:50:50 · 1635 阅读 · 0 评论 -
典型递归求解之汉诺塔问题,c++实现
典型递归求解之汉诺塔问题,c++实现问题分析实现总结问题分析汉诺塔问题是典型的递归问题,假设有n个盘要移动,n>0;A、B、C分别为三个柱子,A是原始柱子(有盘),B是间接柱子,C是目标柱子将n个盘从A移动到C,最终结果一定是,将n-1个盘移动到B,然后第n个盘移动到C此时,A上没有盘,B上有n-1个盘,C上有一个盘n有3可知,此时要做的是将B上的n-1个盘移动到C上,A是间接柱子此时问题的状态回到第一步的,只是原始柱子从A变成了B,重复到n==0即没有盘在A、B柱子上,算法结束。原创 2022-03-17 19:24:50 · 641 阅读 · 0 评论 -
回溯法之迷宫最短路径,c++实现
迷宫最短路径迷宫的算法很多,但是解释原理的却很少,在这里我利用自己的亲身经历来讲解一下求解迷宫的原理,迷宫求解可以利用栈结构,即深度优先,探索一个位置就标记,通则走,不同则后退寻找下一个位置,可以求出通路,简单但是不一定是最短路径,这里求最短路径利用的是广度优先的思想,什么是广度优先,利用队列实现,一个元素出对,然后访问这个元素相邻的所有元素,原理是,一个二维数组,0表示墙,1表示路,这里我利用......原创 2019-06-18 17:01:32 · 10616 阅读 · 12 评论 -
分治法之棋盘覆盖复牌问题,c++实现
分治法之棋盘覆盖复牌问题,c++实现问题描述实现问题描述一个棋盘,其中有一个特殊点,用L的骨牌去覆盖,骨牌不能重叠,如何做到全部覆盖,如图:实现采用分治法将一个棋盘划分为4个棋盘,有一个棋盘存在特殊点,其他三个棋盘没有特殊点将没有特殊点的棋盘连接,用L型骨牌连接三个棋盘,使每个棋盘变成有一个特殊点的子棋盘重复操作,直到大小为1,算法结束// 将一个棋盘划分为4个棋盘,则有三个棋盘是没有特殊点的,将这三个棋盘用一个L型骨牌连接,将会得到一个规模小的子棋盘 // # 假设特殊点的下标为d原创 2022-03-14 18:39:26 · 1003 阅读 · 0 评论 -
算法分析之快速排序算法,c++实现
算法分析之快速排序算法,c++实现快速排序算法分析第一次划分实现快速排序算法分析如图所示,数组开始是无序的,从两端开始比较,找到中间值,然后以中间值为中心点,进行分段第一次划分然后再从每一段中重复此操作,直到只剩下分段长度为1结束,即i>=j则结束实现// # 快速排序,将一个数组,找到一个中间值,然后以这个中间值为中心,分段// # 然后再从每一段中重复此操作,直到只剩下分段长度为1结束,即i>=j则结束 // 1. 定义一个分段函数,参数分别是arr(待排序数组),be原创 2022-03-14 11:52:12 · 1637 阅读 · 0 评论