![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
HelloZEX
[2018·10·18]所谓核心竞争力,永远是自身的实力!
[2022·4·4]我需要换一个大脑!
展开
-
【算法】到底什么是动态规划?
动态规划(dynamic programming, DP)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。动态规划的本质不在于是递推或是递归。动态规划是对于某一类问题的解决方法!重点在于如何鉴定“某一类问题”是动态规划可解的而不是纠结解决方法是递归还是递推!当你企图使用计算机解决一个问题是,其实就是在思考如何将这个问题表达成状态以及如何在状态中转移。...原创 2019-08-27 22:21:25 · 3299 阅读 · 0 评论 -
【算法】斐波那契(Fibonacci )数列第N项
一、int fib2(int n){ if(n == 0) return 0; if(n == 1) return 1; return fib2(n-1)+fib2(n-2);}二、、int fib(int n){ int result[2] = {0,1}; if(n < 2) return result[n]; int fibOne = 0; int...原创 2018-07-12 16:55:54 · 1306 阅读 · 0 评论 -
【算法/剑指Offer】请实现两个函数,分别用来序列化和反序列化二叉树
题目描述请实现两个函数,分别用来序列化和反序列化二叉树/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }}; ...原创 2018-07-19 09:12:30 · 1266 阅读 · 0 评论 -
【算法/剑指Offer】给定一棵二叉搜索树,请找出其中的第k小的结点。
题目描述给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : v...原创 2018-07-19 09:12:37 · 2414 阅读 · 0 评论 -
【算法/剑指Offer】从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
题目描述从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { ...原创 2018-07-18 15:14:44 · 1574 阅读 · 0 评论 -
【算法/剑指Offer】请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
题目描述请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。可以用一个队列,一个栈实现也可用两个栈实现,这里用两个栈实现,思路简单一点。来个图直接解释,链接:https://www.nowcoder.com/questionTerminal/91b69814117f4e8097390d107d...原创 2018-07-18 15:00:11 · 1590 阅读 · 0 评论 -
【算法/剑指Offer】请实现一个函数,用来判断一颗二叉树是不是对称的。
题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。代码很简单,关键还是知道怎么样才能判断一个二叉树是否对称,只要采用前序、中序、后序、层次遍历等任何一种遍历方法,分为先左后右和先右后左两种方法,只要两次结果相等就说明这棵树是一颗对称二叉树。迭代版本class Solution {public: ...原创 2018-07-18 14:52:06 · 521 阅读 · 0 评论 -
【算法/剑指Offer】给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。
题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路:首先知道中序遍历的规则是:左根右,然后作图 结合图,我们可发现分成两大类:1、有右子树的,那么下个结点就是右子树最左边的点;(eg:D,B,E,A,C,G) 2、没有右子树的,也可以分成两类,a)是父节点左孩子(eg:N,I,L) ,那...原创 2018-07-18 14:42:57 · 2073 阅读 · 0 评论 -
【算法/剑指Offer】如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。
题目描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。 对于数据流,对应的就是在线算法了,一道很经典的题目就是在1亿个数中找到最大的前100个数,这是一...原创 2018-07-18 14:32:38 · 1584 阅读 · 0 评论 -
【算法】0-1背包问题
动态规划之详细分析0-1背包问题题目: 有 N 件物品和一个容量为 V 的背包。第 i 件物品的费用是 w[i],价值是 p[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。 本文按照动态规划的标准模式解析:http://blog.csdn.net/hearthougan/article/details/53749841 0-1背包问题,表...转载 2018-07-26 09:34:02 · 1166 阅读 · 0 评论 -
【算法】广度/宽度优先搜索(BFS)
挺好的一篇文章,讲的挺清楚。广度/宽度优先搜索(BFS)【算法入门】郭志伟@SYSU:raphealguo(at)qq.com2012/04/271.前言广度优先搜索(也称宽度优先搜索,缩写BFS,以下采用广度来描述)是连通图的一种遍历策略。因为它的思想是从一个顶点V0开始,辐射状地优先遍历其周围较广的区域,故得名。 一般可以用它做什么呢?一个最直观经典的例子就是走迷宫...转载 2018-08-03 16:27:54 · 337 阅读 · 0 评论 -
【算法】深度优先搜索(DFS)
挺好的一篇文章,讲的挺清楚。深度优先搜索(DFS)【算法入门】郭志伟@SYSU:raphealguo(at)qq.com2012/05/121.前言深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法。它的思想是从一个顶点V0开始,沿着一条路一直走到底,如果发现不能到达目标解,那就返回到上一个节点,然后从另一条路开始走到底,这种尽量往深处走的概念即...转载 2018-08-03 16:35:29 · 246 阅读 · 0 评论 -
【OpenCV】噪声的添加和过滤
1. 简介下面简单介绍两种图像噪声,即椒盐噪声和高斯噪声。(1) 椒盐噪声 椒盐噪声也称脉冲噪声,它是一种随机出现的白点或者黑点,可能是亮的区域有黑色像素或是在暗的区域有白色像素(或是两者皆有)。 图像模拟添加椒盐噪声是通过:随机获取像素点,并设置为高亮度点和低亮度点来实现的。(2) 高斯噪声 高斯噪声是指概率密度函数服从高斯分布的一类噪声。 特别的,如果一个噪声,它的幅度分布服...转载 2018-11-21 16:26:08 · 2643 阅读 · 0 评论 -
【深度学习】初识VGG16
一. 简述 VGG卷积神经网络是牛津大学在2014年提出来的模型。当这个模型被提出时,由于它的简洁性和实用性,马上成为了当时最流行的卷积神经网络模型。它在图像分类和目标检测任务中都表现出非常好的结果。在2014年的ILSVRC比赛中,VGG 在Top-5中取得了92.3%的正确率。VGG结构图VGG-16VGG模型有一些变种,其中最受欢迎的当然是 VGG-16,这是一个拥有16...原创 2018-11-15 16:23:36 · 17550 阅读 · 0 评论 -
【算法】 丑数 2,3,5。求第n个丑数
因子中仅仅包含2、3、5的数,称为丑数。比如说14,就不是丑数,因为因子包含7。请输出所有丑数中的第n个丑数。#include <iostream> #include <cmath>#include <algorithm>using namespace std; int calc(int n){ int* data = new int...原创 2018-09-13 14:50:04 · 854 阅读 · 0 评论 -
【算法】汉诺塔问题 Hanoi Tower
题目内容 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。输入盘子的数量n,求多少步能搬完。经验值:最少步数:2^n - 1样例输入...原创 2018-09-13 11:11:19 · 673 阅读 · 0 评论 -
【算法】KMP初识
参考:1 21. 引言 本KMP原文最初写于2年多前的2011年12月,因当时初次接触KMP,思路混乱导致写也写得混乱。所以一直想找机会重新写下KMP,但苦于一直以来对KMP的理解始终不够,故才迟迟没有修改本文。 然近期因开了个算法班,班上专门讲解数据结构、面试、算法,才再次仔细回顾了这个KMP,在综合了一些网友的理解、以及算法班的两位讲师朋友曹博、邹博的理解之后,写了9张...转载 2018-08-06 16:41:12 · 171 阅读 · 0 评论 -
【算法】基数排序
原文:http://www.cnblogs.com/Braveliu/archive/2013/01/21/2870201.html编程论到极致,核心非代码,即思想。所以,真正的编程高手同时是思想独到及富有智慧(注意与聪明区别)的人。每一个算法都是一种智慧的凝聚或萃取,值得我们学习从而提高自己,开拓思路,更重要的是转换思维角度。其实,我们大多数人都活在“默认状态”下。没有发觉自己的...转载 2018-08-06 10:14:24 · 191 阅读 · 0 评论 -
【算法】希尔排序的实现
希尔排序的实质就是分组插入排序,该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。 该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因...转载 2018-08-06 10:09:46 · 318 阅读 · 0 评论 -
【算法】动态规划-优化编辑器问题
原文:https://blog.csdn.net/shizheng163/article/details/50988023对于两个字符串A和B,我们需要进行插入、删除和修改操作将A串变为B串。 定义ic,dc,rc分别为三种操作的代价,请设计一个高效算法,求出将A串变为B串所需要的最少代价。 给定两个字符串A和B,及它们的长度和三种操作代价,请返回将A串变为B串所需要的最小代价。保证两串长度均...转载 2018-08-04 21:11:19 · 353 阅读 · 0 评论 -
【算法】分支定界
一、基本描述 类似于回溯法,也是一种在问题的解空间树T上搜索问题解的算法。但在一般情况下,分支限界法与回溯法的求解目标不同。回溯法的求解目标是找出T中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。 (1)分支搜索算法 所谓“分支”就是采用广度优先的策略,依...转载 2018-07-18 11:11:24 · 2574 阅读 · 0 评论 -
【算法】回溯算法
1.概念 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回到上一步还能执行的状态,尝试别的路径。 类似于走迷宫一样,假设我们到了每一个岔路口都规定,除了走过的地方,按照先往上走到底,如果不能走,在退回到上一个岔路口,走左边,如果不行再走右边,如果不行再走下面。每次退回就是每次的回溯,所以回溯法要保存每一次的状态...转载 2018-07-18 10:53:38 · 305 阅读 · 0 评论 -
【算法】动态规划
动态规划的定义:动态规划是运筹学的一个分支,是求解决策过程的最优化的数学方法。20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程的优化问题时,提出了著名的最优化原理,把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解,创立了解决这类过程优化问题的新方法——动态规划。在各种算法中,我认为动态规划是较难掌握好的,主要难在模型的建立。解题的一般步骤是:1.找...转载 2018-07-18 10:47:24 · 220 阅读 · 0 评论 -
【算法】巧妙的邻接表(数组实现)
之前我们介绍过图的邻接矩阵存储法,它的空间和时间复杂度都是N2,现在我来介绍另外一种存储图的方法:邻接表,这样空间和时间复杂度就都是M。对于稀疏图来说,M要远远小于N2。先上数据,如下。1234564 51 4 94 3 81 2 52 4 61 3 7第一行两个整数n m。n表示顶点个数(顶点编号为1~n),m表示边的条数。接下来m行表示,每行有3个数x y z,表示顶点x到顶点y的边的权值为z...转载 2018-06-25 16:41:11 · 249 阅读 · 0 评论 -
【算法】Dijkstra最短路算法
上周我们介绍了神奇的只有五行的Floyd最短路算法,它可以方便的求得任意两点的最短路径,这称为“多源最短路”。本周来来介绍指定一个点(源点)到其余各个顶点的最短路径,也叫做“单源最短路径”。例如求下图中的1号顶点到2、3、4、5、6号顶点的最短路径。 与Floyd-Warshall算法一样这里仍然使用二维数组e来存储顶点之间边的关系,初始值如下。 我们还需要用一个一维数组d...转载 2018-06-25 16:06:01 · 204 阅读 · 0 评论 -
【算法】只有五行的Floyd最短路算法
暑假,小哼准备去一些城市旅游。有些城市之间有公路,有些城市之间则没有,如下图。为了节省经费以及方便计划旅程,小哼希望在出发之前知道任意两个城市之前的最短路程。 上图中有4个城市8条公路,公路上的数字表示这条公路的长短。请注意这些公路是单向的。我们现在需要求任意两个城市之间的最短路程,也就是求任意两个点之间的最短路径。这个问题这也被称为“多源最短路径”问题。 现在需要一个数...转载 2018-06-25 11:37:38 · 357 阅读 · 0 评论 -
【算法】解密回文——栈
上一节中我们学习了队列,它是一种先进先出的数据结构。还有一种是后进先出的数据结构它叫做栈。栈限定只能在一端进行插入和删除操作。比如说有一个小桶,小桶的直径只能放一个小球,我们现在向小桶内依次放入2号、1号、3号小球。假如你现在需要拿出2号小球,那就必须先将3号小球拿出,再拿出1号小球,最后才能将2号小球拿出来。在刚才取小球的过程中,我们最先放进去的小球最后才能拿出来,而最后放进去的小球却可以最先...转载 2018-06-25 11:16:17 · 315 阅读 · 1 评论 -
【算法】队列——解密QQ号
新学期开始了,小哈是小哼的新同桌(小哈是个小美女哦~),小哼向小哈询问QQ号,小哈当然不会直接告诉小哼啦,原因嘛你懂的。所以小哈给了小哼一串加密过的数字,同时小哈也告诉了小哼解密规则。规则是这样的:首先将第1个数删除,紧接着将第2个数放到这串数的末尾,再将第3个数删除并将第4个数再放到这串数的末尾,再将第5个数删除……直到剩下最后一个数,将最后一个数也删除。按照刚才删除的顺序,把这些删除的数连在...转载 2018-06-25 11:02:12 · 1836 阅读 · 1 评论 -
【算法】买书
之前讲了三种常用的经典排序。排序算法还有很多,例如选择排序、计数排序、基数排序、插入排序、归并排序和堆排序等等。堆排序是基于二叉树的排序,以后再说吧。先分享一个超酷的排序算法的视频。 再来看一个具体的例子《小哼买书》来看看三个排序在应用上的区别和局限性。 小哼的学校要建立一个图书角,老师派小哼去找一些同学做调查,看看同学们都喜欢读哪些书。小哼让每个同学写出一个自己最想读的书的ISBN号...转载 2018-06-25 10:57:47 · 364 阅读 · 0 评论 -
【算法】最常用的排序——快速排序
上一节的冒泡排序可以说是我们学习第一个真正的排序算法,并且解决了桶排序浪费空间的问题,但在算法的执行效率上却牺牲了很多,它的时间复杂度达到了O(N2)。假如我们的计算机每秒钟可以运行10亿次,那么对1亿个数进行排序,桶排序则只需要0.1秒,而冒泡排序则需要1千万秒,达到115天之久,是不是很吓人。那有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢...转载 2018-06-25 10:37:42 · 1813 阅读 · 0 评论 -
【算法】邻居好说话——冒泡排序
简化版的桶排序不仅仅有上一节所遗留的问题,更要命的是:它非常浪费空间!例如需要排序数的范围是0~2100000000之间,那你则需要申请2100000001个变量,也就是说要写成int a[2100000001]。因为我们需要用2100000001个“桶”来存储0~2100000000之间每一个数出现的次数。即便只给你5个数进行排序(例如这5个数是1,1912345678,2100000000,...转载 2018-06-23 09:49:45 · 221 阅读 · 0 评论 -
【算法】开启“树”之旅
我们先来看一个例子。 这是什么?是一个图?不对,确切的说这是一棵树。这哪里像树呢?不要着急我们来变换一下。 是不是很像一棵倒挂的树,也就是说它是根朝上,而叶子朝下的。不像?哈哈,看完下面这幅图你就会觉得像啦。 你可能会问:树和图有什么区别?这个称之为树的东西貌似和无向图差不多嘛。不要着急,继续往下看。树其实就是不包含回路的连通无向图。你可能还是无法理解这其中的差...转载 2018-06-25 16:50:01 · 248 阅读 · 0 评论 -
【算法】二叉树
二叉树是一种特殊的树。二叉树的特点是每个结点最多有两个儿子,左边的叫做左儿子,右边的叫做右儿子,或者说每个结点最多有两棵子树。更加严格的递归定义是:二叉树要么为空,要么由根结点、左子树和右子树组成,而左子树和右子树分别是一棵二叉树。 下面这棵树就是一棵二叉树。 二叉树的使用范围最广,一棵多叉树也可以转化为二叉树,因此我们将着重讲解二叉树。二叉树中还有连两种特殊的二叉树叫做满二叉树和完全二叉...转载 2018-06-25 16:50:32 · 161 阅读 · 0 评论 -
【算法】堆——神奇的优先队列(上)
堆是什么?是一种特殊的完全二叉树,就像下面这棵树一样。 有没有发现这棵二叉树有一个特点,就是所有父结点都比子结点要小(注意:圆圈里面的数是值,圆圈上面的数是这个结点的编号,此规定仅适用于本节)。符合这样特点的完全二叉树我们称为最小堆。反之,如果所有父结点都比子结点要大,这样的完全二叉树称为最大堆。那这一特性究竟有什么用呢? 假如有14个数分别是99、5、36、7、22...转载 2018-06-25 16:56:15 · 139 阅读 · 0 评论 -
【算法】贪婪算法(贪心算法)
贪心算法是寻找最优解问题的常用方法。 这种方法模式一般将求解过程分成若干个步骤,在每个步骤都应用贪心原则,选取当前状态下最好的或最优的选择(局部最有利的选择),并以此希望最后对跌出的结果也是最好的或最优的解。 贪心算法的每次决策都以当前情况作为基础并根据某个最有原则进行选择,不从整体上考虑其他各种可能的情况。 贪心算法。动态规划法、分治法都是对问题进行分解,定义最优解的子结构. 贪心算法与...转载 2018-07-18 10:33:25 · 8558 阅读 · 0 评论 -
【算法】减而治之和分而治之
任何一个可以用计算机求解的问题所需的计算时间都与其规模有关。问题规模越小,解题所需的计算时间往往也越少,从而也越容易计算。想解决一个较大的问题,有时是相当困难的。分治法的思想就是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。 分治的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同。找出各部分的解,然后把各部分的解...转载 2018-07-18 10:07:52 · 1017 阅读 · 0 评论 -
【算法/剑指Offer】地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。
题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?########/**@auth...原创 2018-07-17 22:00:37 · 4602 阅读 · 0 评论 -
【算法/剑指Offer】请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。
题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 a b c e s f c s a d e e 这样的3 X 4 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字...原创 2018-07-17 20:25:58 · 2401 阅读 · 1 评论 -
【算法/剑指Offer】给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值
题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,...原创 2018-07-17 20:17:04 · 1782 阅读 · 0 评论 -
【算法/剑指Offer】在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
Q:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : ...原创 2018-07-17 20:11:20 · 1290 阅读 · 0 评论