![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构和算法
冠切云之崔嵬
这个作者很懒,什么都没留下…
展开
-
字符串的模式匹配算法KMP
目录1、利用串的其他操作实现模式匹配2、朴素的模式匹配算法:不用串的其他操作,只用基本数组实现3、KMP3.1 KMP算法3.2 KMP算法改进简单介绍三种方法。1、利用串的其他操作实现模式匹配//返回子串T在主串S中第pos个字符之后的位置int Index(String S, String T, int pos){ int n,m,i; ...原创 2019-05-07 21:11:02 · 246 阅读 · 0 评论 -
动态规划1
动态规划:把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系逐个求解。算法步骤:1、描述最优解的结构2、递归定义最优解的值3、按照自底向上的方式计算最优解的值4、由计算出的结果构造一个最优解最优子结构:问题的一个最优解包含了子问题的最优解。最优子结构在问题域中以两种方式变化:1、原问题的一个最优解中使用了多少个子问题,2、在决定一个最优解中使用哪些子问题时有多少种...翻译 2019-07-03 16:28:52 · 106 阅读 · 0 评论 -
动态规划2
链接:https://www.zhihu.com/question/23995189/answer/35429905动态规划的本质不在于是递推或是递归,也不需要纠结是不是内存换时间。理解动态规划并不需要数学公式介入,只是完全解释清楚需要点篇幅…首先需要明白哪些问题不是动态规划可以解决的,才能明白为神马需要动态规划。不过好处时顺便也就搞明白了递推贪心搜索和动规之间有什么关系,以及帮助那些...转载 2019-07-03 16:50:07 · 105 阅读 · 0 评论 -
贪心算法1
链接:https://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741375.html一、基本概念:所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须...转载 2019-07-03 17:05:41 · 151 阅读 · 0 评论 -
动态规划和贪心算法的区别
动态规划具有两个性质:1)重叠子问题2)最优子结构贪心算法:1)贪心选择性质2)最优子结构最优子结构性质是指问题的最优解包含其子问题的最优解时,就称该问题具有最优子结构性质,重叠子问题指的是子问题可能被多次用到,多次计算,动态规划就是为了消除其重叠子问题而设计的。其实贪心算法是一种特殊的动态规划,由于其具有贪心选择性质,保证了子问题只会被计算一次,不会被多次计算,因此贪心算...转载 2019-07-03 17:56:00 · 17456 阅读 · 2 评论 -
二叉树的各种操作
https://subetter.com/algorithm/various-operations-of-the-binary-tree.html转载 2019-08-06 17:53:37 · 94 阅读 · 0 评论 -
图算法笔记
1、图的存储结构:1、邻接矩阵:顶点数组+边数组。空间复杂度O(n^2),时间复杂度O(n^2).2、邻接表:数组+链表。无向图所需存储空间为O(|V|+2|E|),有向图所需存储空间为O(|V|+|E|),时间复杂度O(N^2). 逆邻接表。3、十字链表(针对有向图):顶点结点+弧结点。整合了邻接表和逆邻接表,容易求得顶点的入度和出度。除了结构复杂一点,创 ...原创 2019-08-12 13:43:44 · 119 阅读 · 0 评论 -
快速排序和堆排序:为什么快速排序要比堆排序性能好?
第一、堆排序访问数据的方式没有快速排序友好。对于快速排序来说,数据是顺序访问的。而对于堆排序来说,数据是跳着访问的。比如,堆排序中,最重要的一个操作就是数据的堆化。比如下面这个例子,对堆顶进行堆化,会依次访问数组下标是1,2,4,8的元素,而不像快速排序那样,局部顺序访问,所以,这样对CPU缓存是不友好的。第二、对于同样的数据,在排序过程中,堆排序算法的数据交换次数要多于快速排序。对于...转载 2019-08-17 21:03:39 · 5712 阅读 · 2 评论