![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法与编程
C++编程实现各种算法
sheeper200626
这个作者很懒,什么都没留下…
展开
-
LeetCode:二分查找
二分查找在最简单的形式中,二分查找对具有指定左索引和右索引的连续序列进行操作。这就是所谓的查找空间。二分查找维护查找空间的左、右和中间指示符,并比较查找目标或将查找条件应用于集合的中间值;如果条件不满足或值不相等,则清除目标不可能存在的那一半,并在剩下的一半上继续查找,直到成功为止。如果查以空的一半结束,则无法满足条件,并且无法找到目标。在接下来的章节中,我们将回顾如何识别二分查找问题,“为什么我们使用二分查找” 这一问题的原因,以及你以前可能不知道的 3 个不同的二分查找模板。由于二分查找是一个常见的原创 2020-08-24 17:46:31 · 127 阅读 · 0 评论 -
斐波那契蛇:由外向内遍历数组
#include "stdafx.h"#include<iostream>#include<vector>#include<algorithm>using namespace std;int main(){ int n; cin >> n; if (n == 0) cout << endl; if (n == 1) cout << 1 << endl; vector<vector<i原创 2020-08-21 21:42:30 · 155 阅读 · 0 评论 -
LeetCode:二叉树
二叉树值得注意的是,当你删除树中的节点时,删除过程将按照后序遍历的顺序进行。 也就是说,当你删除一个节点时,你将首先删除它的左节点和它的右边的节点,然后再删除节点本身。关于在二叉树的遍历中,将递归变为显性栈遍历;模板:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(i原创 2020-08-21 16:52:41 · 60 阅读 · 0 评论 -
DFS+回溯法
用该道题搞懂dfs+回溯Q:面对需要运用dfs如何分析问题,并且循序渐进的补充条件?首先,我们去向左dfs深度遍历算法去将所有的情况都求出来,也就是在写之前先全写,然后再在基础上去加剪枝条件,这样就不会陷入无法入手的境地,其次我们可以首先这么写。边写边想//伪代码dfs(s,str,start.....)//首先对加入字符串,然后后面的参数等分析的时候再写出来//首先将所有情况遍历出来,所以递归终止条件最后再写//有中情况,取第一个数、前两个数、前三个数(写完在剪枝的时候加入是否在范围内,以及.原创 2020-08-09 11:54:01 · 1040 阅读 · 0 评论 -
算法思想:背包问题
概述:背包问题是最优化问题的一种,前面讲过关于对于图的路径规划的最优解,了解到其中的Dijkstra最短路径算法,这种算法中主要是优化P和D两个数组,其中D用于表示最优路径长度,P则用于记录每个节点上一个节点的局部路径,这种思想是根据上一步骤的最优解来求得下一步的最优解,根据这种思想,其实背包问题也是这种思想,其中的最大价值相当于最优解的路程D,而在构建的矩阵中根据价值反溯的过程相当于在P这个矩阵中的寻找路径。区别:图是根据已有的邻接表或邻接矩阵进行求解,而背包问题则是通过给出的条件进行构造矩阵。一、0原创 2020-08-02 19:40:59 · 1072 阅读 · 0 评论 -
数据结构:图
首先,得了解一些图的基础概念,才能在往下走的时候不出现误解;图:由边顶点集(vertex)和边集组成(edge)例子:所以又分为有向图和无向图;图的存储结构一般有邻接矩阵和邻接表,在做笔试题的时候,领接矩阵一般会内存冗余度大,所以一般选用邻接表。邻接表:GraphAdjList这里是邻接表的实现;我们可以用C++中的unorder_map进行实现,只需要边表节点VertexNode集合。首先,将顶点集正的节点都new内存空间保存到Graph中,可以看到,索引key就是顶点的值,v原创 2020-07-31 23:57:28 · 264 阅读 · 0 评论 -
算法预备知识
1、算法设计要求正确性、可读性、健壮性(当输入数据不合法时,算法也能做出相关处理,而不是产生异常或莫名其妙的结果)、时间效率高和存储量低2、算法效率的度量方法推导大O阶方法:①用常数1取代运行时间中的所有加法常数②在修改后的运行次数函数中,只保留最高阶项③如果最高阶项存在且不是1,则去除与这个项相乘的常数。//例子1:常数阶int sum = 0,n=100;//执行一次sum = (1+n)*n/2;//执行一次printf("%d",sum);//执行一次//函数运行次数:f(n)原创 2020-07-12 13:54:06 · 104 阅读 · 0 评论 -
算法:字符串匹配算法KMP
首先介绍关键概念:这位博主A讲的十分详细且好理解这位博主B编程实现我的小结:1、KMP:需要首先构造子串一个可以查询的数组,博主A中描述了前缀和后缀最长相同长度的思路,这个数组后面主要是为了在匹配的时候用于子串的后溯(注意边界为起点)。2、然后就是匹配的算法,通过在母串的范围内进行匹配,若子串在这个范围内全部完成,那匹配完成,反之,未匹配成功。其中数组的用法是针对子串的,所以在编程的时候,需要有独立的模块思想,并且要有指针的思想,例如,将子串和母串看成两个独立的模块,两者的索引看做指向各自的指针(转载 2020-07-05 09:40:37 · 59 阅读 · 0 评论