写代码是一种艺术,甚于蒙娜丽莎的微笑!

不拼搏,枉少年!

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

随笔分类 -  数据结构

数据结构是组织和访问数据的系统方法,是计算机专业一门十分重要的基础课程。该分类下的文章主要是个人的学习笔记和对网络资源的整理,如有类似,纯属无意。为尊重原作者,我会将转载或者引用处进行标识,方便链接原文。
摘要:0-1背包问题 完全背包问题 多重背包问题是0-1背包问题和完全背包问题的综合体,可以描述如下:从n种物品向容积为V的背包装入,其中每种物品的体积为w,价值为v,数量为k,问装入的最大价值总和? 我们知道0-1背包问题是背包问题的基础,所以在解决多重背包问题的时候,要将多重背包向0-1背包上进行转换 阅读全文
posted @ 2016-03-28 16:09 RunningSnail 阅读(7949) 评论(0) 推荐(0) 编辑

摘要:B树的定义 一棵m阶的B树满足下列条件: 树中每个结点至多有m个孩子。 除根结点和叶子结点外,其它每个结点至少有m/2个孩子。 根结点至少有2个孩子(如果B树只有一个结点除外)。 所有叶结点在同一层,B树的叶结点可以看成一种外部节点,不包含任何信息。 有k个关键字(关键字按递增次序排列)的非叶结点恰 阅读全文
posted @ 2015-12-25 21:11 RunningSnail 阅读(25543) 评论(3) 推荐(4) 编辑

摘要:小引 看到这个名词-tarjan,大家首先想到的肯定是又是一个以外国人名字命名的算法。说实话真的是很佩服那些算法大牛们,佩服得简直是五体投地啊。今天就遇到一道与求解有向图中强连通分量的问题,我的思路就是遍历图中的每一个点,然后进行深度遍历,看最后能否回归到这个点上。如果可以回归,那么这个点肯定在一个 阅读全文
posted @ 2015-12-15 17:32 RunningSnail 阅读(8357) 评论(0) 推荐(6) 编辑

摘要:简单描述 0-1背包问题描述如下: 有一个容量为V的背包,和一些物品。这些物品分别有两个属性,体积w和价值v,每种物品只有一个。要求用这个背包装下价值尽可能多的物品,求该最大价值,背包可以不被装满。因为最优解中,每个物品都有两种可能的情况,即在背包中或者不存在(背 包中有0个该物品或者 1个),所以 阅读全文
posted @ 2015-12-13 16:07 RunningSnail 阅读(16344) 评论(1) 推荐(3) 编辑

摘要:状态转移方程 动态规划中当前的状态往往依赖于前一阶段的状态和前一阶段的决策结果。例如我们知道了第i个阶段的状态Si以及决策Ui,那么第i+1阶段的状态Si+1也就确定了。所以解决动态规划问题的关键就是确定状态转移方程,一旦状态转移方程确定了,那么我们就可以根据方程式进行编码。 在前面的文章《动态规划 阅读全文
posted @ 2015-12-11 16:03 RunningSnail 阅读(27138) 评论(1) 推荐(6) 编辑

摘要:问题: 给定一个序列a1,a2..........an;求子序列的和最大问题dp[i]表示以ai结尾的子序列和,max为最大子序列的和。 阅读全文
posted @ 2015-12-11 10:40 RunningSnail 阅读(1274) 评论(0) 推荐(0) 编辑

摘要:图主要的应用有:最小生成树,最短路径,关键路径,拓扑排序。 在前面的文章中针对与这些应用都做了一些简单介绍,并附有代码实例。 下面对这些应用做一些汇总。 本篇文章借鉴了CSDNhttp://blog.csdn.net/hguisu/article/details/7719428,因为写得很好,所以下 阅读全文
posted @ 2015-12-08 22:25 RunningSnail 阅读(1444) 评论(0) 推荐(0) 编辑

摘要:图的遍历 图的遍历主要有两种方法:广度遍历和深度遍历,它们也叫做广度优先搜索和深度优先搜索。由遍历所经过的路径可以形成一个树,分别叫做广度优先搜索生成树和深度优先搜索生成树。 深度优先搜索 深度优先搜索如树的先根遍历类似,如下图1: 图1 其搜索过程,如图2所示: 图1 假设从顶点v1 出发进行搜索 阅读全文
posted @ 2015-12-08 22:11 RunningSnail 阅读(2557) 评论(0) 推荐(2) 编辑

摘要:今天做了一道关于最短路径的算法题,虽然最后AC了,但是我写的第一个算法,我认为是没有问题的,自己编写的测试用例也全部通过,反复调试了,都没有错误。可是在OJ上一提交就提示Wrong Answer,真是苦闷啊!希望看到这篇文章的同志们给些提示。 两个算法都是用邻接表存储图的,都是比较纯粹的自定义结构体 阅读全文
posted @ 2015-12-07 14:01 RunningSnail 阅读(546) 评论(0) 推荐(0) 编辑

摘要:概念 在当初学习《数据结构》总共学习了四种有关数据的逻辑结构:集合、线性、树、图。而图Graph是其中最为复杂的数据结构,因为在图形结构中,结点之间的关系是任意的,图中任意两个元素之间都有可能相关。 图的存储结构 关于图的存储结构总共有四种:数组表示法、邻接表、十字链表、邻接多重表。既然有这么多种表 阅读全文
posted @ 2015-12-05 22:35 RunningSnail 阅读(515) 评论(0) 推荐(0) 编辑

摘要:概述 与前面说的Floyd算法相比,Dijkstra算法只能求得图中特定顶点到其余所有顶点的最短路径长度,即单源最短路径问题。 算法思路 1、初始化,集合K中加入顶点v,顶点v到其自身的最短距离为0,到其它所有顶点为无穷。 2、遍历与集合K中结点直接相邻的边(U,V,C),其中U属于集合K,V不属于 阅读全文
posted @ 2015-12-05 17:30 RunningSnail 阅读(404) 评论(0) 推荐(0) 编辑

摘要:概念 最短路径也是图的一个应用,即寻找图中某两个顶点的最短路径长度。 实际应用:例如确定某两个城市间的坐火车最短行车路线长度等。 Floyd algorithm 中文名就是弗洛伊德算法。 算法思路:用邻接矩阵来存储图的结构,edge[i][j]表示从结点i到结点j的最短路径长度,那么该如何计算edg 阅读全文
posted @ 2015-12-04 10:42 RunningSnail 阅读(615) 评论(0) 推荐(0) 编辑

摘要:问题描述 雷雷承包了很多片麦田,为了灌溉这些麦田,雷雷在第一个麦田挖了一口很深的水井,所有的麦田都从这口井来引水灌溉。 为了灌溉,雷雷需要建立一些水渠,以连接水井和麦田,雷雷也可以利用部分麦田作为“中转站”,利用水渠连接不同的麦田,这样只要一片麦田能被灌溉,则与其连接的麦田也能被灌溉。 现在雷雷知道 阅读全文
posted @ 2015-11-27 16:45 RunningSnail 阅读(352) 评论(0) 推荐(0) 编辑

摘要:next数组的历史 有关字符串的模式匹配算法中,比较容易写出的是朴素的匹配算法也就是一种暴力求解方式,但是由于其时间复杂度为子串长度和主串长度的乘积,例如strlen(subStr) = n,strlen(mainStr) = m,则其时间复杂度为O(mn)。 为了能够得到更有效的匹配算法,D.E. 阅读全文
posted @ 2015-11-26 11:07 RunningSnail 阅读(2719) 评论(0) 推荐(0) 编辑

摘要:下面将介绍三种有关字符串匹配的算法,一种是朴素的匹配算法,时间复杂度为O(mn),也就是暴力求解。这种方法比较简单,容易实现。一种是KMP算法,时间复杂度为O(m+n),该算法的主要任务是求模式串的next数组。另外还有一种对KMP算法的改进,主要是求nextval数组。 第一种朴素的匹配算法: 第 阅读全文
posted @ 2015-11-26 10:43 RunningSnail 阅读(1108) 评论(0) 推荐(0) 编辑

摘要:什么是素数,大家都比较熟悉。但是如何判定一个数是否为素数呢?经典的判定方法,就是把它的定义依据:除了1和它自身之外,不能被其它的数整除,那么这个数就是素数。下面是朴素的素数判定法:bool judgeIsPrime(int number){ if (number <= 1) re... 阅读全文
posted @ 2015-11-22 20:44 RunningSnail 阅读(509) 评论(0) 推荐(0) 编辑

摘要:Description:The rod-cutting problem is the following. Given a rod of length n inches and atable of prices pi for i D 1,2,…,n, determine the maximum re... 阅读全文
posted @ 2015-11-20 14:33 RunningSnail 阅读(14394) 评论(1) 推荐(2) 编辑

摘要:动态规划(dynamic programing)和分治法类似,都是通过组合子问题的解来求解原问题的解。(在经典排序算法中的二路归并排序和快速排序都用到了分而治之的思想-分治法)。分治法是将原问题划分为没有交集,相互独立的子问题,并分别求解后再进行合并,求出原问题的解。动态规划应用于子问题重叠的情况,... 阅读全文
posted @ 2015-11-19 21:54 RunningSnail 阅读(2115) 评论(0) 推荐(0) 编辑

摘要:对于二叉树来说,只要按照下面的模板可以很容易地实现先序、中序和后序的递归遍历二叉树。 使用递归可以使代码变得简洁,明了。我们不用考虑计算机底层的递归工作栈是怎么实现的,只要写好递归式,给出递归终止条件,就可以把剩余的计算工作交给计算机去执行。所以说递归是个好东东啊。但是追求真相的人,往往不会满足于此 阅读全文
posted @ 2015-11-16 22:34 RunningSnail 阅读(1523) 评论(0) 推荐(0) 编辑

摘要:最近一直带两个考研学生的《数据结构》,正好讲到图这一章,顺便实现了一下迪杰斯特拉算法。 阅读全文
posted @ 2015-11-11 15:36 RunningSnail 阅读(372) 评论(0) 推荐(0) 编辑