数据结构与算法之美
数据结构与算法之美
春江花月夜晨
这个作者很懒,什么都没留下…
展开
-
算法导论:Seminar of algorithms [week 7] 动态规划1
(1)原问题的最优解—计算A(1…n)所需的最低代价就是m[1,n]。(2)此递归公式假定最优分割点k是已知的,但实际上我们是不知道。不过,k只有j-i种可能的取值,即k=i,i+1,…,j-1。由于最优分割点必在其中,我们只需检查所有可能情况,找到最优者即可。(3)m[i,j]的值给出了子问题最优解的代价,但它并未提供足够的信息来构造最优解。为此,我们用s[i,j]保存最优括号化方案的分割点位置k,即使得m[i,j]=m[i,k]+[k+1,j]+p(i-1)p(k)p(...原创 2021-03-04 11:20:47 · 89 阅读 · 1 评论 -
数据结构与算法之美 32 字符串匹配基础(中):如何实现文本编辑器中的查找功能
如何实现文本编辑器中的查找功能背景BM 算法的核心思想BM 算法原理分析1. 坏字符规则2. 好后缀规则BM 算法代码实现背景文本编辑器中的查找替换功能,我想你应该不陌生吧?比如,我们在 Word 中把一个单词统一替换成另一个,用的就是这个功能。你有没有想过,它是怎么实现的呢?当然,你用上一节讲的 BF 算法和 RK 算法,也可以实现这个功能,但是在某些极端情况下,BF 算法性能会退化的比较严重,而 RK 算法需要用到哈希算法,而设计一个可以应对各种类型字符的哈希算法并不简单。对于工业级的软件开发来原创 2020-09-30 08:47:50 · 351 阅读 · 0 评论 -
数据结构与算法之美 32 字符串匹配基础
字符串匹配基础背景BF算法 (暴力匹配算法)RK 算法内容小结:两种字符串匹配算法,BF 算法和 RK 算法。背景从今天开始,我们来学习字符串匹配算法。字符串匹配这样一个功能,我想对于任何一个开发工程师来说,应该都不会陌生。我们用的最多的就是编程语言提供的字符串查找函数,比如 Java 中的 indexOf(),Python 中的 find() 函数等,它们底层就是依赖接下来要讲的字符串匹配算法。字符串匹配算法很多,我会分四节来讲解。今天我会讲两种比较简单的、好理解的,它们分别是:BF 算法和 RK原创 2020-09-18 09:38:47 · 134 阅读 · 0 评论 -
数据结构与算法之美 30图的表示 31 深度和广度优先搜索
30 | 图的表示:如何存储微博、微信等社交网络中的好友关系?1. 图定义:树中的元素我们称为节点,图中的元素我们就叫做顶点(vertex)。图中的一个顶点可以与任意其他顶点建立连接关系。我们把这种建立的关系叫做边(edge)。顶点的入度,表示有多少条边指向这个顶点;顶点的出度,表示有多少条边是以这个顶点为起点指向其他顶点。2. 带权图3.邻接矩阵(Adjacency Matrix)存储方法邻接矩阵的缺点顶点很多,但每个顶点的边并不多,邻接矩阵的存储方法就更加浪费空间邻接矩阵的原创 2020-09-15 21:12:07 · 316 阅读 · 0 评论 -
《300分钟搞定数据结构与算法》学习之旅 第四讲:递归与回溯
本文内容摘自《300分钟搞定数据结构与算法》,仅供学后查阅递归与回溯递归(Recursion)算法思想代码:回溯(Backtracking)算法思想解题模板代码模板例题分析解题思路代码实现递归和回溯的关系密不可分:递归的基本性质就是函数调用,在处理问题的时候,递归往往是把一个大规模的问题不断地变小然后进行推导的过程。回溯则是利用递归的性质,从问题的起始点出发,不断地进行尝试,回头一步甚至多步再做选择,直到最终抵达终点的过程。递归(Recursion)算法思想递归算法是一种调用自身函原创 2020-08-01 11:30:29 · 213 阅读 · 0 评论 -
《300分钟搞定数据结构与算法》学习之旅 第三讲:排序
本文内容摘自《300分钟搞定数据结构与算法》,仅供学后查阅排序大纲冒泡排序(Bubble Sort)基本思想实现例题分析代码示例算法分析插入排序(Insertion Sort)基本思想特点例题分析代码示例算法分析归并排序(Merge Sort)基本思想实现代码示例例题分析算法分析快速排序(Quick Sort)基本思想实现例题分析代码示例算法分析拓扑排序(Topological Sort)基本思想实现例题分析解题思路代码示例算法分析大纲基本的排序算法冒泡排序(Bubble Sort)插入排序(原创 2020-08-01 11:13:57 · 143 阅读 · 0 评论 -
《300分钟搞定数据结构与算法》学习之旅 第二讲:高级数据结构
本文内容摘自《300分钟搞定数据结构与算法》,仅供学后查阅高级数据结构优先队列特点应用场景举例:实现牢记优先队列有三个重要的性质。优先队列最基本的操作有两个。初始化图基本知识点必会知识点前缀树应用场景举例:经典应用性质实现线段树树状数组优先队列特点能保证每次取出的元素都是队列中优先级别最高的。优先级别可以是自定义的,例如,数据的数值越大,优先级越高;或者数据的数值越小,优先级越高。优先级别甚至可以通过各种复杂的计算得到。应用场景从一堆杂乱无章的数据当中按照一定的顺序(或者优先级)逐步地筛选出部分原创 2020-08-01 10:33:25 · 191 阅读 · 0 评论 -
《300分钟搞定数据结构与算法》学习之旅 第一讲:常用数据结构
本文内容摘自《300分钟搞定数据结构与算法》常用数据结构数组、字符串链表单链表:双链表:常规解决思路栈队列双端队列树树的遍历数组、字符串数组的优缺点要掌握一种数据结构,就必须要懂得分析它的优点和缺点。数组的优点在于:构建非常简单能在 O(1) 的时间里根据数组的下标(index)查询某个元素而数组的缺点在于:构建时必须分配一段连续的空间查询某个元素是否存在时需要遍历整个数组,耗费 O(n) 的时间(其中,n 是元素的个数)删除和添加某个元素时,同样需要耗费 O(n原创 2020-07-21 20:35:32 · 321 阅读 · 0 评论 -
红黑树详细图解
blog转载链接红黑树详细图解树相关知识框架结构平衡二叉搜索树二叉搜索树平衡改进二叉搜索树AVL 树平衡因子B 树特点m 阶 B 树的性质(m ≥ 2)B 树 VS 二叉搜索树红黑树定义和性质红黑树与 B 树的等价变换红黑树的基本操作左旋右旋变色变换规则红黑树搜索红黑树插入定位插入的位置插入后实现自平衡树相关知识框架结构平衡二叉搜索树平衡二叉搜索树(Balanced Binary Search Tree),英文简称 BBST。经典常见的平衡二叉搜索树是 AVL 树和红黑树。二叉搜索树二叉搜索树转载 2020-07-15 21:34:14 · 307 阅读 · 0 评论 -
复杂度分析笔记
时间复杂度:大 O 复杂度表示法:表示代码执行时间随数据规模增长的变化趋势,也叫作渐进时间复杂度(asymptotic time complexity),简称时间复杂度。复杂度量级:多项式量级:常数阶O(1)、对数阶O(logn)、线性阶O(n)、线性对数阶O(nlogn)、平方阶O(n2),立方阶O(n3),……,K次方阶O(nk)非多项式量级:指数阶O(2n)、阶乘阶O(n!)非...原创 2019-11-30 16:02:06 · 176 阅读 · 0 评论