
数据结构与算法
科研小阿斗
keep calm and stay strong
展开
-
动态规划题目详解
动态规划问题主要的应用DP:将一个问题拆成几个子问题,分别求解这些子问题,即可推断出大问题的解。思路主要是三步走:一.确定(定义)状态;就是我们要保存哪些东西,这个总要知道吧.(可以从时间或者是空间上进行划分)二.确定决策并写出状态转移方程.(当我们确定了状态,就需要知道状态是怎么转移的) 感觉这个就是描述子问题的通式三.寻找边界条件。英文我们的状态转移方程是一个递推式,所...原创 2019-05-08 21:34:02 · 586 阅读 · 0 评论 -
数据结构之线段树和字典树
一.线段树1.1引例A.给出n个数,n<=100,和m个询问,每次询问区间[l,r]的和,并输出。一种回答:这也太简单了,O(n)枚举搜索就行了。另一种回答:还用得着o(n)枚举,前缀和o(1)就搞定。那好,我再修改一下题目。B.给出n个数,n<=100,和m个操作,每个操作可能有两种:1、在某个位置加上一个数;2、询问区间[l,r]的和,并输出。回答:o(...原创 2019-04-19 10:25:01 · 978 阅读 · 0 评论 -
数据结构之图结构
详解感觉看这个应该就够了:https://blog.youkuaiyun.com/Ontheroad_/article/details/72739380一.八皇后问题二.数独问题原创 2019-04-11 22:21:57 · 149 阅读 · 0 评论 -
数据结构之数组
一.从排序数组中删除重复项1.就是进行比较,如果和前面那一个相等,就进行删除咯def deleteArray(arr): before=0 back=1 while back<len(arr): if arr[before]==arr[back]: arr.pop(back) else: ...原创 2019-04-11 22:14:23 · 334 阅读 · 0 评论 -
数据结构之树结构
这篇博客讲的很好:二叉树题目汇总关于解树的题目总的就一条,使用递归(递归的本质其实也是编译器帮你维护的栈结构)或者是栈,找好递归的终止条件所有的题目都经过调试,基本没问题。Talk is cheap, show my code to you.一.前序遍历,中序遍历,后序遍历法一:递归实现(其实递归就是一种栈)法二:栈+迭代递归与非递归递归版(只要改变后面的retur...原创 2019-04-11 21:58:23 · 594 阅读 · 0 评论 -
数据结构之链表
一.删除排序链表的重复元素其实就是遍历元素,如果碰到下一个相同的,就指向下下一个,如果不同的话,就指向下一个如果要删除链表的重复元素,可以分成两步走,一步是对链表进行排序,另一步就是相当于删除排序数组的重复元素如果要删除链表的重复元素,而不改变数据,暴力解法,遇到相同的元素,从头开始就执行删除操作,时间复杂度O(n^2),可以进行优化的def deleteDuplicates(s...原创 2019-04-11 21:36:18 · 205 阅读 · 0 评论 -
数据结构之字符串
一.规则的判断is用来判断是否是同一个对象,is相等代表两个对象的id相同==用来判断两个对象的值是否相等1.1判断字符串是否符合整数规则#判断是否为整数def isNum(str1): try: num=int(str1) print(num) return isinstance(num,int) except:...原创 2019-04-11 21:22:18 · 482 阅读 · 0 评论 -
python实现KMP算法
一.KMP算法KMP算法应该是每一本《数据结构》书都会讲的,算是知名度最高的算法之一,KMP是三位大牛:D.E.Knuth、J.H.Morris和V.R.Pratt同时发现的。取了每个人的第一个字母所以叫KMP咯。KMP算法要解决的问题就是在字符串(也叫主串)中的模式(pattern)定位问题。说简单点就是我们平时常说的关键字搜索。模式串就是关键字(接下来称它为P),如果它在一个主串(接下...原创 2019-04-07 22:29:17 · 4819 阅读 · 6 评论 -
图的经典四大算法-Prim和Kruskal,Dijkstra和Floyd算法
一.简介这篇博文主要是讲解两种算法一个是最小生成树算法(最小代价树)里面包含了两种算法:Prim算法和Kruskal算法(PK算法)用于把图中的点全部连接起来另一个是单源最短路径算法:Dijkstra算法和Floyd算法(简称DF二连算法)用于求解单源最短路径二.算法简介对于最小代价生成树的Prim、Kruskal算法,两种算法的主要核心思想是贪心算法。Prim算法是从...原创 2019-04-07 20:56:01 · 8562 阅读 · 2 评论 -
python实现八大排序算法+桶排序
一.引言本博客大致会提及到排序算法的理论讲解,但是不会深入讲解,强烈推荐数据结构和算法的可视化网站。本文给出八种经典的排序算法的Python实现代码和部分注解,算是一个总结,也感谢网络众多优秀的博主分享他们的idea,站在巨人的肩膀上果然成长很迅速。排序可以说在经典算法中是很重要的一部分,对于常见的排序算法要做到本能的敲出代码,了解各种算法的时间复杂度和空间复杂度,关于时间复杂度和空间复杂度具...原创 2019-04-07 14:15:13 · 762 阅读 · 0 评论 -
动态规划入门
动态规划相信大家都知道,动态规划算法也是新手在刚接触算法设计时很苦恼的问题,有时候觉得难以理解,但是真正理解之后,就会觉得动态规划其实并没有想象中那么难。网上也有很多关于讲解动态规划的文章,大多都是叙述概念,讲解原理,让人觉得晦涩难懂,即使一时间看懂了,发现当自己做题的时候又会觉得无所适从。我觉得,理解算法最重要的还是在于练习,只有通过自己练习,才可以更快地提升。话不多说,接下来,下面我就通过一个...转载 2019-03-25 20:30:05 · 94 阅读 · 0 评论 -
常用算法:分治算法、动态规划算法、贪心算法、回溯算法和分支限界法
一.分治算法基本概念 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)。 任何一个可以用计算机求解的问题所需的计算时...转载 2019-03-25 20:03:28 · 769 阅读 · 0 评论 -
python实现图的DFS和BFS
一.理论部分图关于图的定义,在python语言中,我们可以使用字典来进行定义。在C++语言中可以使用邻接表或者邻接矩阵来进行储存定义。在这里主要介绍python中图的DFS和BFS。核心思想:解决图的BFS问题就是利用队列的先进先出的思想来解决问题。因为我们需要利用queue来保证树的第几层或者说是图中我们遍历走了几步的顺序。BFS和树的层序遍历非常类似,这也是很多博客为啥只把...原创 2019-03-25 11:14:51 · 23859 阅读 · 19 评论