![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
窗边的扁豆
这个作者很懒,什么都没留下…
展开
-
求解最大子数组
求解最大子数组问题描述,神马是最大子数组 假定我们一个已知的数组为: int numbers[]={1,2,6,3,-5,-7,1,-6,8}; 现在我们需要求解其中某几个数之和最大的一段子数组,如果不考虑方法的复杂性,首先我们可以考虑暴力求解,即将所有可能的组合进行排列组合。那么我们可以得到n*(n-1)/2(不考虑顺序的排列组合)种可能,其复杂度为O(n^2)。为求得更原创 2017-04-18 19:14:13 · 283 阅读 · 0 评论 -
#深度优先算法(DFS)
深度优先算法基本思想从一个顶点V0开始,沿着一条路一直走到底,如果发现不能到达目标解,那就返回到上一个节点,然后从另一条路开始走到底,这种尽量往深处走的概念即是深度优先的概念。为了实现深度优先搜索,首先选择一个起始顶点并需要遵守三个规则:如果可能,访问一个邻接的未访问顶点,标记它,并把它放入栈中。当不能执行规则1时,如果栈不空,就从栈中弹出一个顶点。如果不能执行规则1和规则2,就完成了整个搜索原创 2017-05-03 19:49:33 · 340 阅读 · 0 评论 -
广度优先算法(BFS)
广度优先算法基本思想它的思想是从一个顶点V0开始,辐射状地优先遍历其周围较广的区域。搜索过程:先访问节点v;再依次访问与v相邻的节点;访问这些节点之后,再访问与之相邻的节点。与深度优先搜索不同,其先遍历周围的是周围节点。常用于寻找最短路径的解决方案。基本模型(通过队列完成)起始点入队;while(队列不为空){ 头结点出队; for(遍历周围的子节点) { 若它是所求的目标状态原创 2017-05-03 19:50:35 · 598 阅读 · 0 评论 -
图的遍历
图神马是图简单来说,图就是由一些小圆点(称为顶点)和连接这些小圆点的直线(称为边)组成。对于一个图,我们最常见的需要就是遍历一个图,通过这些边到达每一个顶点。通常我们有两种方式去遍历所有的顶点,一种是深度优先遍历,另一种是广度优先遍历。(对于深度与广度可以参考之前的文章)。图的表示方法在计算机语言中我们通常可以通过一个二维数组表示一个图。如同下图:图中的1表示有边可以联通两个顶点,∞表示没有边联原创 2017-05-03 22:47:14 · 315 阅读 · 0 评论 -
常用排序算法的Java实现
(冒泡排序)大学里面最早接触的一种排序基本原理 * 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 * 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 * 针对所有的元素重复以上的步骤,除了最后一个。* 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 代码实现 public static void原创 2017-05-03 10:34:04 · 251 阅读 · 0 评论 -
经典算法——动态规划入门实例
title: 经典算法——动态规划入门实例date: 2017-09-06 12:10:33categories: 算法tags: 动态规划算法经典算法——动态规划入门实例经典算法动态规划入门实例神马是动态规划求解最长公共子串求解最大公有子序列总结神马是动态规划专业定义:动态规划的本质,是对问题状态的定义和状态转移方程的定义。通过拆分问题,定义问题状态和状态之间的关系,使得问题能够原创 2017-09-06 16:36:07 · 1139 阅读 · 0 评论 -
程序员必备算法——排列组合
程序员必备算法——排列组合程序员必备算法排列组合还记得排列组合吗全排列的实现组合问题总结还记得排列组合吗?在高中的时候最常接触的莫过于排列组合了,毕竟高考必考的嘛。我们先来回忆下这两个的公式是啥:如果看到这个还有一丢丢的印象,说明大家的基础都还不错。那么问题来了,大家都是学计算机的,我们如何用程序去模拟这个过程,从而达到列出所有排列组合的可能呢?全排列的实现暴力求解(不可取,不可取)原创 2017-10-10 09:31:29 · 18242 阅读 · 7 评论