![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法与数据结构
文章平均质量分 86
Spground
https://github.com/Spground
https://spground.github.io
https://www.cnblogs.com/Spground/
展开
-
常用数据结构图--拓扑排序
图 在数学中,一个图(Graph)是表示物件与物件之间的关系的数学对象,是图论的基本研究对象。图是十分重要的数据结构,常常被应用于实际生活的应用之中。生活中常见的问题例如交通路线图、任务指定分配、工期计算、航空网络等,都可以使用图相关的理论来建立模型。下面是《数据结构与算法分析》对图的若干定义 一个图(Graph)G = (V, E)由顶点(vertex)集和边(Edge)集E组成。每一条原创 2016-09-16 15:24:21 · 7267 阅读 · 0 评论 -
01背包问题
01背包问题背包问题背包问题主要包含以下3种基本的问题:01背包完全背包多重背包其中对于每一种xx背包问题还存在一个特殊的情形,即要求背包恰好被装满,这种特殊问题的求解主要是在动态规划的状态数组的初始化做一下特殊的处理。除此之外,有时候我们不仅仅要求背包能装下的最大物品的价值,我们还希望得到具体的装包方案,这里就会涉及到状态数组的回溯(Track),下面会举例说明。...原创 2018-04-06 18:43:59 · 340 阅读 · 0 评论 -
数组的区间和
数组的区间和输入一个无序的数组nums,然后可以在O(1)的时间复杂度给出区间iii到jjj之间的元素和。例如:数组nums = [1,2,3,4,2,3,1],查询区间下标为1到3之间的元素的和,则返回sum = 2+3+4 = 9。如果排序的话,原来的下标之间的相对关系就变了,维护这个相对关系也是十分复杂的,因此排序是不能排序了。看到O(1)时间复杂度,想到的应该是类似Ha...原创 2018-04-12 11:20:43 · 5302 阅读 · 0 评论 -
网易2019实习生招聘编程第3题——牛牛找工作
为了找到自己满意的工作,牛牛收集了每种工作的难度和报酬。牛牛选工作的标准是在难度不超过自身能力值的情况下,牛牛选择报酬最高的工作。在牛牛选定了自己的工作后,牛牛的小伙伴们来找牛牛帮忙选工作,牛牛依然使用自己的标准来帮助小伙伴们。牛牛的小伙伴太多了,于是他只好把这个任务交给了你。 输入描述: 每个输入包含一个测试用例。 每个测试用例的第一行包含两个正整数,分别表示工作的数量...原创 2018-03-28 14:04:20 · 515 阅读 · 0 评论 -
完全背包问题
完全背包问题完全背包是背包问题的基础问题之一,和前面介绍的01背包类似,唯一的不同的是每件物品不再是只有一件,而是无限件。01背包前面已经做了简单的总结。https://blog.csdn.net/u014532901/article/details/79835712完全背包问题的描述如下:给定nnn件物品,对于第iii件物品,其价值为viviv_i,重量为wiwiw_i,与此同时...原创 2018-04-07 20:42:13 · 203 阅读 · 0 评论 -
Morris 遍历
1. 二叉树遍历树是最重要的数据结构之一,而树的遍历是树最基本的操作。二叉树的遍历一般来说有三种遍历次序:前序遍历 中序遍历后序遍历而这三种遍历次序都可以采用递归和非递归的方式来完成。就时间、空间的复杂度来讲,因为非递归需要借助额外的Stack来完成操作,所以递归和非递归的时间复杂度都是O(n),O(logn)。那么有没有另外的不同的二叉树遍历方法,在时间或空间原创 2018-01-27 15:35:37 · 4159 阅读 · 0 评论 -
常用算法之-回溯法
回溯法回溯法简介回溯法的基本步骤回溯法之经典问题回溯法之经典问题Sudoku数独回溯法1.回溯法简介回溯法,又称试探法,是常用的,基本的优选搜索方法。常用于解决这一类问题:给定一定约束条件F(该约束条件常用于后面的剪枝)下求问题的一个解或者所有解。回溯法其实是暴力枚举的一种改进,因为其会聪明的filter掉不合适的分支,大大减少了无谓的枚举。若某问题的枚举都是可行解得话,也就是没有剪枝发生,原创 2017-11-20 12:16:08 · 1120 阅读 · 0 评论 -
LCS问题
LCS问题简介最长公共子串问题最长公共子序列问题References LCS问题1. 简介LCS通常是指Longest Common Subsequence, 但是也可代指Longest Common Substring。子串是一种特殊的子序列,子串和子序列的区别就是字串要求是组成子串的 各字符是连续的,而子序列仅仅要求各字符的下标是递增的即可。举个例子,如helloworld, worl原创 2017-11-20 12:08:49 · 769 阅读 · 0 评论 -
KMP算法
KMP算法KMP算法简介KMP算法与确定性有限状态自动机DFA1 DFA与KMP算法2 DFA子串查找KMP算法的主流实现1 next数组2 具体实现KMP算法1.KMP算法简介 KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算>> 法的原创 2017-11-20 12:00:26 · 370 阅读 · 0 评论 -
Union-Find算法
Union-Find算法简介原理改进应用ReferencesUnion-Find算法1.简介Union-Find算法又称并查集算法,是一种作用于并查集数据结构的算法。包含两个主要的操作: - Find 用于查找某个元素属于哪个集合,可以用来确定两个元素是否在同一个集合中; - Union 用于合并两个不同的集合;2.原理并查集数据结构是一种树形结构,树形结构对于有规律的数据组织方式,原创 2017-11-20 11:58:04 · 540 阅读 · 0 评论 -
堆和堆的应用:堆排序和优先队列
堆和堆的应用堆排序和优先队列堆堆的应用堆排序堆的应用优先队列堆的应用海量实数中一亿级别以上找到TopK一万级别以下的数集合总结references堆和堆的应用:堆排序和优先队列1.堆堆(Heap)是一种重要的数据结构,是实现优先队列(Priority Queues)首选的数据结构。由于堆有很多种变体,包括二项式堆、斐波那契堆等,但是这里只考虑最常见的就是二叉堆(以下简称堆)。堆是一棵满足原创 2017-11-19 11:57:02 · 4120 阅读 · 1 评论 -
常用排序算法--合并排序和快速排序
常用排序算法——合并排序常用排序算法合并排序分治合并排序和快速排序快速排序的递归实现合并排序的递归实现合并排序的非递归实现分治分治(Divide and Conquer)是一场常见的算法策略。分治策略的基本思想就是对于一个问题规模为N的问题,将其划分为规模足够小的K个子问题,子问题由于规模足够小可以直接求解,最后将规模足够小的K的问题的解合并得出原问题的解。 分治策略的问题的求解过程的原创 2016-09-30 16:42:17 · 6846 阅读 · 0 评论 -
常用数据结构栈的应用—-表达式求值
常用数据结构栈的应用—-表达式求值常用数据结构栈的应用-表达式求值栈表达式求值后缀表达式求值中缀表达式转后缀表达式代码示例栈 栈是常用的数据结构,栈又称堆栈,是一种受限的线性表。其限制是允许在表中的一端进行插入和删除元素。栈中的元素符合后进先出(FILO)的性质。允许插入和删除元素的一端被称为栈顶,另一端被称为栈底。 栈有两种关键的操作,分别为出栈和压栈。栈有两种关键的操作,原创 2016-09-13 11:53:16 · 12010 阅读 · 3 评论 -
常用排序算法--冒泡排序及改进和插入排序时间复杂度分析
常用排序算法–冒泡排序及改进和插入排序时间复杂度分析常用排序算法冒泡排序及改进和插入排序时间复杂度分析排序及常见排序算法插入排序时间复杂度分析冒泡排序冒泡排序的改进排序及常见排序算法 排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。分内部排序和外部排序。若整个排序过程不需要访问外存便能完成,则称此类排序问题为原创 2016-09-23 19:27:47 · 3894 阅读 · 1 评论 -
线段树
线段树 线段树(英语:Segment tree)是一种二叉树形数据结构,1977年由Jon Louis Bentley发明[1],用以储存区间或线段,并且允许快速查询结构内包含某一点的所有区间。线段树常常用对区间数据的更新和查询,主要的作用就是体现在对区间的处理。最常见就是这样一个问题:现在有一个长度为nnn的数组a[i]a[i]a_{[i]},给定一个区间iii~jjj,返...原创 2018-04-14 10:49:44 · 592 阅读 · 0 评论