算法
文章平均质量分 73
介绍计算机科学中经典的算法。
周先森爱吃素
大家好,我是CSDN博主周先森爱吃素,目前处于研究生阶段,主攻方向为计算机视觉的研究。加入CSDN以来,凭借热爱与坚持,以博文的方式分享所学,截至目前已发文近300篇,内容涉及Python开发、网络爬虫、Linux开发、机器学习、计算机视觉等领域,感谢大家的关注、点赞、评论和收藏,是你们的坚持,促使我在这条路上坚定不移地走下去。未来,我会更加专注于自己喜爱的方向,学习更多的知识,输出更加高质量的文章。
展开
-
算法模板-回溯
本文介绍遍历型题的常用回溯法。原创 2022-05-03 13:57:02 · 238 阅读 · 0 评论 -
算法模板-线段树
本文介绍区间问题非常常用的线段树。原创 2022-04-25 15:43:51 · 237 阅读 · 0 评论 -
算法模板-二分查找
本文介绍非常常用的针对有序数组进行目标值搜索的二分查找算法。原创 2022-04-08 13:36:39 · 1703 阅读 · 0 评论 -
算法模板-广度优先遍历
本文介绍树、图和矩阵搜索中常用的广度优先遍历。转载 2022-02-22 16:48:27 · 179 阅读 · 0 评论 -
算法模板-深度优先遍历
本文介绍树、图和矩阵搜索中常用的深度优先遍历。原创 2022-01-22 13:26:09 · 1077 阅读 · 0 评论 -
算法模板-01背包
本文介绍01背包问题及其常规解法。转载 2021-11-29 15:01:55 · 242 阅读 · 1 评论 -
算法模板-双指针
本文介绍数组题中常用的双指针。原创 2021-10-20 20:38:46 · 249 阅读 · 1 评论 -
算法模板-对称性递归
本文介绍二叉树类题中常用的对称性递归。原创 2021-10-10 12:19:15 · 314 阅读 · 0 评论 -
排序算法01-冒泡排序(Python实现)
冒泡排序的讲解和实现。原创 2018-12-08 21:57:21 · 692 阅读 · 0 评论 -
排序算法02-直接插入(Python实现)
Python实现插入排序。原创 2018-12-11 19:41:46 · 290 阅读 · 0 评论 -
排序算法03-希尔排序(Python实现)
Python实现希尔排序。原创 2018-12-14 14:37:15 · 253 阅读 · 0 评论 -
排序算法04-快速排序(Python实现)
Python实现快速排序。原创 2018-12-15 21:21:58 · 266 阅读 · 0 评论 -
排序算法05-简单选择排序(Python实现)
Python实现简单选择排序。原创 2018-12-16 16:16:34 · 504 阅读 · 0 评论 -
排序算法06-堆排序(Python实现)
Python实现堆排序。原创 2018-12-17 18:28:35 · 479 阅读 · 0 评论 -
排序算法07-归并排序(Python实现)
Python实现归并排序。原创 2018-12-17 19:09:11 · 377 阅读 · 2 评论 -
排序算法08-基数排序(Python实现)
Python实现基数排序。原创 2018-12-17 19:30:59 · 416 阅读 · 0 评论 -
动态规划算法01-爬楼梯问题
利用动态规划解爬楼梯问题。原创 2019-03-21 21:12:25 · 1268 阅读 · 0 评论 -
动态规划算法02-矿工挖矿问题
使用动态规划求解解矿工挖矿问题。原创 2019-03-22 15:33:50 · 4952 阅读 · 4 评论 -
动态规划算法03-背包问题
动态规划求解0-1背包问题。原创 2019-03-23 14:45:48 · 2323 阅读 · 1 评论 -
动态规划算法04-最长递增子序列问题
最长递增子序列问题。简述经典的动态规划问题。问题描述给定一个序列,求解其中长度最长的递增子序列。问题分析这种可以向下查询答案的很容易想到动态规划的解法。要求长度为i的序列Ai={a1,a2,a3,ai}的最长递增子序列,需要先求出序列Ai-1{a1,a2,a3,ai-1}中各元素(a1,a1,ai-1)作为最大元素的最长递增子序列,然后将这i-1个递增序列与ai进...原创 2019-03-24 14:49:32 · 1427 阅读 · 0 评论 -
动态规划算法05-KSum问题
KSum问题。简述CCF、LeetCode这类程序设计竞赛的常见题型。问题描述给定一个n个数字的序列(均为整数),求k个数字的和为target的情况有多少种?注意,这里是依据下标选数,也就是说两种情况三个数字一样但是有一个数字的下标在两个情况中不一样,那么算作两种情况。这种题目只要一个最后结果可以使用递归迅速解答,本质上是在填一个二维表;如果要输出所有情况,本质上是填一个三维表...原创 2019-03-24 20:11:17 · 528 阅读 · 0 评论 -
动态规划算法06-Longest Valid Parentheses问题
最长合法匹配子串长度(动态规划解法)。简述给定一个只包含"(",")"的字符串,是判断一个最长的且能完全匹配的子串的长度。看到这种最有解问题,本能应该想到是动态规划解题。(且只求最值不求序列的可以递归实现)这是LeetCode动态规划类别的一道题。问题描述给定一个字符串,只包含"(“和”)",规定一个"(“必须匹配一个”)",找一个最长的可以完全匹配的子串长度。如"((()“...原创 2019-03-25 19:00:07 · 289 阅读 · 0 评论 -
动态规划算法07-背包问题进阶
本文介绍基于基础01背包问题的进阶问题,即完全背包问题和多重背包问题。原创 2021-11-04 16:25:19 · 582 阅读 · 0 评论 -
深度优先遍历算法-01小偷偷东西问题
小偷偷东西问题前言深度优先遍历是经典的图论算法,深度优先遍历算法的搜索逻辑和它的名字一样,只要有可能,就尽量深入搜索,直到找到答案,或者尝试了所有可能后确定没有解。简单来说,深度优先遍历就是按照某规则(如检索当前节点的第一个子节点)检索某个节点,直到检索完毕再去检索其他节点。搜索问题的本质就是试探问题的所有可能选择,按照特定的规律和顺序,不断去搜索答案,直到找到问题的解。如果把所有可能...原创 2019-04-06 16:09:08 · 2673 阅读 · 0 评论 -
深度优先遍历算法-02最大岛屿问题
最大的岛屿简介比较常见的棋盘类型的DFS问题。问题描述给定一个二维矩阵,其中0代表海洋,1代表陆地(相邻的1连接形成岛屿),现在要求找到最大岛屿面积。是不是有一种LeetCode的既视感。问题分析简单暴力的核心思路就是计算每个岛屿的面积,找到最大的即可。使用从左到右,从上到下的思路遍历矩阵,找到1就说明发现了岛屿,就以岛屿为出发点开始计算面积(根据这个面积决定是否更...原创 2019-04-07 18:41:58 · 1961 阅读 · 2 评论 -
深度优先遍历算法-03二叉树路径遍历问题
二叉树路径遍历简述比较基础的一个DFS的题目,但是确实很多难题的模板。LeetCode很多二叉树的题本质上就是这个路径遍历。本题为了输出路径,使用DFS的经典结构栈完成。问题描述给定一个二叉树结构(通过类定义节点及父子关系),输出所有到达叶子节点的路径。(二叉树只是标准二叉树)问题分析明显的遍历题,那么是何种遍历呢?显然,优先的是到达叶子节点而不是辐射更大的范围,这是...原创 2019-04-08 14:56:54 · 1046 阅读 · 0 评论 -
广度优先遍历算法-01寻找制高点问题
寻找制高点简介比较基础的BFS问题,但是是很多算法题的模板。问题描述现在,有一个矩阵,矩阵的每个值代表山的高度(均大于1),现在要求找到这个山的所有制高点。制高点指的是通过这个点可以从上下左右四个边界走出去这个矩阵平面,注意,是四个边界都能走出去。在整个平面的移动规则是从一个点只可以向上下左右四个方向走,并且只能走到不大于自己的值的位置上去。问题分析这是一个典型的搜...原创 2019-04-09 18:24:43 · 1471 阅读 · 0 评论 -
广度优先遍历算法-02合法的括号问题
合法的括号简介比较基础的BFS题目。注意,由于要对不合法的字符串最小步数删减为合法的字符串,所以BFS合适。之所以选择BFS,是因为要返回的结果为删减最小数目的括号后使字符串合法,“就近搜索显然合适”。问题描述给定一个字符串,字符串会出现字母和"(“以及”)",认为左右括号匹配完全的字符串是合法的,不完全的通过删除若干个括号得到合法字符串,现在要求移除最少数目的括号,使得其合...原创 2019-04-10 16:14:14 · 424 阅读 · 0 评论 -
广度优先遍历算法-03树的右侧问题
树的右侧简介一个有点变形的二叉树的层序遍历。问题描述现在有一个果树,该树果子节点符合二叉树的分布,小王按照规定只能摘到从树的右侧看过去看到的第一个节点,求出节点序列。问题分析举例如下假定树形如上,小王得到的结果为1,3,5,7。其实,这不过是一个层序遍历,求出每一层最后的那个结果而已。算法流程初始化队列,将根节点入队,当前第一层。遍历队列的每个节点,...原创 2019-04-10 17:09:26 · 306 阅读 · 0 评论 -
回溯算法-01遍历所有排列方式问题
遍历所有排列方式前言回溯采用试错的方法解决问题,一旦发现当前步骤失败,回溯算法就返回上一个步骤,继续另一种方案继续试错。回溯算法的优点是速度快,没有尝试所有路径就可能找到答案。当然,如果运气不好,回溯算法就是一个暴力遍历(当答案就是最后一条搜索路径)。回溯算法又称为试探法,它的主要思想如上。回溯算法针对大多数问题有如下特点:问题的答案有多个元素、答案需要满足一些约束(如数独)、寻找答案...原创 2019-04-11 19:48:01 · 728 阅读 · 0 评论 -
回溯算法-02遍历所有组合方式问题
遍历所有的组合方式简介经典的数学组合问题,对应之前的排列问题。问题描述现在有四本书为A,B,C,D,要求选出两本,输出所有的选择情况。问题分析和之前一样,如果试求组合数目,那么DP将会是一个不错的选择,但是DP不是很擅长这种序列输出的题。其实,这还是个回溯题,因为每一步的问题都是一样的只不过参数不一样罢了。每一步都是在剩余书籍中挑出一本。与之前的排列问题不同之处...原创 2019-04-12 14:39:15 · 791 阅读 · 0 评论 -
回溯算法-03八皇后问题
八皇后问题简介回溯法的经典问题。问题描述有8*8=64个格子,每个格子里面可以放一个棋子,现在要求任意两个棋子不在一条横向、纵向或者斜向的直线上。问题分析显然,每一行、每一列都只有一个棋子才有可能满足答案要求。现在,对于这个矩阵,按照行去摆放棋子,第一行只能有一个,假设其在(0,0)的位置,但是现在无法判断棋子在这个位置是否合适,因为后面的棋子都没有确定。所以只能继续...原创 2019-04-13 14:57:17 · 368 阅读 · 0 评论 -
贪心算法-01硬币找零问题
硬币找零问题前言所谓贪心算法,就是遵循某种既定原则,不断选取当前条件下最优的选择来构造每一个子步骤的解决方案,直到获得问题最终的求解。即在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,所做的仅是在某种意义上的局部最优解。利用贪心算法,需要解决两个问题。一是问题是否适合使用贪心算法求解,即所求解问题是否具有贪心选择性质。所谓贪心选择性质,是指应用同一规...原创 2019-04-15 15:36:41 · 4311 阅读 · 0 评论 -
贪心算法-02活动安排问题
活动安排问题简介活动安排问题是需要共享公共资源的一系列活动的高效安排问题,以在限定的资源前提下尽可能多地安排活动。一般,算法题中给出开始结束时间的活动序列都可以使用这种贪心思路。问题描述有若干个活动,第i个活动的开始时间和结束时间是[Si,fi),只有一间教室,活动之间不能交叉,即一个活动结束后另一个才能开始,求解最多能安排多少个活动?问题分析目的是提高教室的利用率,尽...原创 2019-04-16 20:45:03 · 1045 阅读 · 0 评论 -
贪心算法-03哈夫曼编码问题
哈夫曼编码简介哈夫曼编码是一种字符编码方式,可以对指定的字符集进行数据压缩,压缩率在20%到90%。问题描述现在有一个包含5个字符{A,B,C,D,E},各个字符的出现频率依次为{0.35, 0.1, 0.2, 0.2, 0.15}。需要构造一种有效的编码类型,使用该编码表达以上字符表时可以产生平均长度最短的位串。问题分析n个字符组成的文本编码时有两种方式,定长编码(为...原创 2019-04-16 21:35:11 · 2433 阅读 · 0 评论 -
分治算法-01连续子序列的最大和问题
连续子序列的最大和前言分治算法的核心思想是将一个规模很大的问题化简为n个规模较小的问题,这些子问题虽然独立而不同,但是问题的本质是一致的,从而达到分而治之的目的。首先通过“分”将问题分解为n个子问题,再将子问题一步步分解,知道达到最小的子问题。这时,“治”子问题再利用子问题的解推导总问题的解。子问题应与原问题拥有同样的结构,或者拥有同样的形式。只有这样,才能利用递归解决子问题。问...原创 2019-04-18 12:56:21 · 1481 阅读 · 0 评论 -
分治算法-02凸包问题
几何问题之凸包简介简单地说,凸包是正好包含所有点的凸多边形,可以将它想象为一个包围点几何的橡皮筋。之所以叫凸包是因为这个凸多边形包围所有点。本案例主要讲解分治法解决凸包问题,常见的还有Graham扫描法、Jarvis步进法、快包法等。问题描述给定点集合,输出凸包的顶点集合。问题分析分治法讲究分而治之,核心思想很容易理解,难的是想出实施的具体步骤。怎么把大问题拆分成小问题...原创 2019-04-18 13:48:05 · 2293 阅读 · 0 评论 -
分治算法-03多项式乘法问题
多项式乘法简介多项式的运算表示是一个很常见的算法问题。问题描述给予两个多项式A(x)与B(x),得出C(x)=A(x)B(x)。例如,A(x)=3+2x+3x2+4x3,B(x)=2+x2,C(x)=6+4x+9x2+10x3+3x4+4x^5。问题分析一般情况下,使用系数表示多项式,不存在的项系数为0。但是,除了系数表示外,多项式还有一种表示叫做点值表示。若多项式...原创 2019-04-18 15:13:14 · 3255 阅读 · 0 评论