超人汪小建(seaboat)
公众号:【远洋号】,笔名seaboat,擅长工程算法、人工智能算法、自然语言处理、计算机视觉、架构、分布式、高并发、大数据和搜索引擎等方面的技术,大多数编程语言都会使用,但更擅长Java、Python和C++。平时喜欢编程、绘画、看书、写作和运动,擅长素描、篮球、跑步、游泳、健身和羽毛球等运动项目。崇尚技术自由,崇尚思想自由。出版书籍:《Tomcat内核设计剖析》、《图解数据结构与算法》、《图解Java并发原理》、《人工智能原理科普》。
展开
-
怎样衡量两个字符串的相似度(编辑距离动态规划求解)
前言目前计算句子相似性有很多不同的方案,比如基于语义词典的方法、基于相同词汇的方法、基于统计的方法和基于编辑距离的方法。这篇文章先介绍编辑距离的基础。编辑距离编辑距离其实就是指把一个字符串转换为另外一个字符串所需要的最小编辑操作的代价数。包括插入字符、替换字符和删除字符。编辑距离越小,相似度越大。比如我们要将what转换成where,可能是将 a -> e,接着 t -&...原创 2018-06-12 08:22:35 · 1879 阅读 · 0 评论 -
动态规划求解最长公共子序列
前言推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种...转载 2019-02-25 08:00:00 · 768 阅读 · 0 评论 -
图论动态规划算法——Floyd最短路径
前言推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。Floyd算法Floyd是一种经典的多源最短路径算法,它通过动态规划的思想来寻找给定加权图中的多源点之间的最短路径,算法时间复杂度是O(n3)。之所以叫Floyd是因为该算法发明人之一是Robert F...原创 2018-11-12 08:33:46 · 3147 阅读 · 2 评论 -
聊聊算法,AI算法和传统算法
什么是算法算法是一组清晰定义的指令集合,用于解决某类问题或执行某种运算任务。算法应该在有限的空间和时间内进行表达,其运行从初始状态和初始输入开始,经过一系列有限而清晰定义的指令操作后,最终产生输出并终止于某个最终状态。算法的作用算法是一个包含了一系列操作的过程,算法由计算机执行以保证在有限时间内找到解决方法。算法是为了能更快更容易更好地解决问题,算法由设计者硬编码。算法的应用范围很广,常规基础算法与数据结构紧密相关,该类算法更多被用于确定性领域,比如对于链表、数组、图和堆等等的各种搜索和排序算法。另原创 2020-12-02 09:21:27 · 2771 阅读 · 0 评论 -
使用哈希算法将字符串映射到数组中
需求将不同字符串映射到对应数组,数组不够时自动成倍扩容,比如有一个数组String[4],现在准备将不同的string映射到String[4]上,str5时会自动扩容并重新打散。str1-->String[3]str2-->String[0]str3-->String[2]str4-->String[1]方案先使用哈希运算,比如用murmurhash3_x86_32算法得到一个32位的值a。原创 2017-02-23 19:19:13 · 3831 阅读 · 0 评论 -
闲聊算法
什么是算法算法是一组清晰定义的指令集合,用于解决某类问题或执行某种运算任务。算法应该在有限的空间和时间内进行表达,其运行从初始状态和初始输入开始,经过一系列有限而清晰定义的指令操作后,最...原创 2020-12-02 08:00:00 · 255 阅读 · 0 评论 -
AC自动机+trie树实现高效多模式匹配字典
前言经常会遇到一类需求,在一段字符串中查找所有能匹配上的模式,比如查找一段文字匹配上字典中哪些短语。这时为了高效处理,就会考虑 AC 自动机,即 Aho-Corasick 自动机算法。它的核心思想是通过有限自动机巧妙地将字符比较转化为了状态转移。通过 AC 自动机能做到匹配时不需要回溯,而且时间复杂度为 O(n),即时间复杂度与词典的规模无关。暴力匹配暴力匹配就是一个一个比较,...原创 2018-07-09 08:24:05 · 3095 阅读 · 0 评论 -
图论最小生成树
前言推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。最小生成树最小生成树(Minimum Spanning Tree),简称MST,更详细点叫最小权重生成树,是一副连通加权无向图中一棵权值最小的生成树。对于图,在完全连通的情况下,则拥有生成树。而如果图不...原创 2018-12-03 09:23:59 · 859 阅读 · 3 评论 -
二叉搜索树的遍历
前言推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。二叉搜索树二叉搜索树(Binary Search Tree,简写BST),又称为二叉排序树,属于树的一种,通过二叉树将数据组织起来,树的每个节点都包含了健值 key、数据值 data、左子节点指针、右子...原创 2019-03-11 08:22:49 · 447 阅读 · 0 评论 -
三分钟图解B树
B树B树即平衡查找树,一般理解为平衡多路查找树,也称为B-树、B_树。是一种自平衡树状数据结构,能对存储的数据进行O(log n)的时间复杂度进行查找、插入和删除。B树一般较多用在存储系统上,比如数据库或文件系统。B树特点 B树可以定义一个m值作为预定范围,即m路(阶)B树。 每个节点最多有m个孩子。 每个节点至少有ceil(m/2)个孩子,除了根节点和叶子...原创 2020-04-20 08:59:10 · 663 阅读 · 0 评论 -
双数组Trie树高效构建有向无环图
图图是很常见的一种结构了,不管是数据结构算法中的各种图结构,还是机器学习中的概率图。图主要是由若干顶点及连接两顶点的边所构成的图形,通过它可以用来描述某些事物之间的某种特定关系。有向无环图有向无环图,即 Directed Acyclic Graph,属于有向图,图结构中不存在环,可用来表示事件之间依赖关系。Trie树Trie 是一种搜索树,它的 key 都为字符串,...原创 2018-07-19 08:33:13 · 1423 阅读 · 0 评论 -
二叉搜索树的前驱和后继
AI时代已经到来,未来几十年AI会越来越普遍,作为技术人员如果想不被浪潮淹没最好掌握这种基础技能,对AI有兴趣想入门的同学可以看看下面的课程:https://edu.csdn.net/topic/ai30?utm_source=wjhttps://edu.csdn.net/course/detail/6601?utm_source=wj前言推出一个新系列,《看图轻松理解数据结构和算法》...原创 2019-04-01 08:48:49 · 767 阅读 · 2 评论 -
怎样实现基于Trie树和字典的分词功能
前言目前做分词比较流行的是用深度学习来做,比如用循环神经网络和条件随机场,也有直接用条件随机场或隐马尔科夫模型的。前面也实现过上面几种,效果挺不错,基于隐马尔科夫模型的差一点,条件随机场的效果较好,而加入深度学习的效果最好。而最最传统的分词做法很多都是基于字典的,然后通过最大匹配法匹配,效果比较一般。效果虽然一般,但我们还是看下怎么实现的吧。Trie树结构Trie 是一种搜索树...原创 2018-06-06 08:36:22 · 1701 阅读 · 0 评论 -
机器学习之决策树
前言决策树是很常见的机器学习分类算法,竟然叫决策树,那么它的模型其实就像树一样。通过对样本集的学习,挖掘出有用的规则。对于程序员来说或许以条件语句来看就更好理解了,决策树可以看成是多个if then条件语句的集合。这种模型等同于我们写的条件语句,所以它的预测分类速度是很快的。例子来个例子了解下决策树分类过程,以女生相亲挑“高富帅”为例吧,遇到已婚的肯定是不交往了,在未婚的情况下接着原创 2018-01-28 10:03:06 · 1094 阅读 · 1 评论 -
看图轻松理解斐波那契数列
前言推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种...原创 2019-01-21 08:00:00 · 1962 阅读 · 0 评论 -
看图轻松理解桶排序
前言推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。桶排序桶排序即Bucket Sort,也称箱排序。其基本思想是将待排序数组分配到若干个桶内,然后每个桶内再各自进行排序,桶内的排序可以使用不同的算法,比如插入排序或快速排序,属于分治法。每个桶执行完排序...原创 2018-11-19 08:44:12 · 414 阅读 · 0 评论 -
看图轻松理解计数排序
前言推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种...转载 2019-01-28 08:00:00 · 279 阅读 · 0 评论 -
看图轻松理解斐波那契数列
前言推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。斐波那契斐波那契(Leonardo Pisano ,Fibonacci, Leonardo Bigollo,1175年-1250年),又称列奥纳多,是中世纪意大利数学家。他是西方第一个研究斐波那契数列的...原创 2019-01-21 08:14:05 · 742 阅读 · 1 评论 -
看图轻松理解数据结构与算法系列(数组)
前言推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。数组数组是最熟悉也是最基础的一种结构了,有限个相同数据类型的元素按顺序排列的集合为数组。数组的数据是连续的,有上界下界,在其中的元素都有属于自己的索引值,即下标,通过这些下标就能定位到数组值。...原创 2018-07-23 08:23:09 · 742 阅读 · 3 评论 -
看图理解基于数组的队列
前言推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。队列队列(queue)是一种运算受限的线性表,通过该线性表存储的元素具有顺序性。它的插入操作只被允许在表的后端,而删除操作只被允许在表的前端。进行插入操作的端称为队尾,而进行删除操作的端则称为队头。队...原创 2019-03-04 08:49:54 · 268 阅读 · 1 评论 -
看图轻松理解并查集
前言推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种...原创 2018-12-24 08:00:00 · 141 阅读 · 0 评论 -
看图轻松理解数据结构与算法系列(单向链表)
前言推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。单向链表单向链表属于链表的一种,也叫单链表,单向即是说它的链接方向是单向的,它由若干个节点组成,每个节点都包含下一个节点的指针。单链表特点创建单链表时无需指定链表的长度,这个比起...原创 2018-07-26 08:26:53 · 822 阅读 · 0 评论 -
看图轻松理解最小(大)堆
前言推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。最小(大)堆最小(大)堆是一颗完全二叉树,该树中的某个节点的值总是不大于(不小于)其左右子节点的值。可以通过下图理解,另外,为什么会使用数组来保存呢?因为利用完全二叉树的性质,我们可以通过数组来表示完全...原创 2018-12-10 08:40:49 · 5090 阅读 · 9 评论 -
看图轻松理解计数排序
前言推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。计数排序计数排序(Counting Sort)算法由 Harold H. Seward 在1954年发明,它不是一种基于元素比较的排序算法,而是将待排序数组元素转化为计数数组的索引值,从而间接使待排序数...原创 2019-01-28 08:33:18 · 764 阅读 · 0 评论 -
看图轻松理桶排序
前言推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种...原创 2018-11-19 08:00:00 · 168 阅读 · 0 评论 -
看图轻松理解数据结构和算法系列(数组)
前言推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种...原创 2018-07-23 08:00:00 · 121 阅读 · 0 评论 -
看图轻松理解并查集
前言推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。并查集并查集(Disjoint Set)是一种用于处理不相交集合的数据结构,顾名思义,通过它可以对集合进行合并和查询操作,从而实现元素分组的管理。并查集其中一个典型应用就是在无向图中判断任意两个顶点是否...原创 2018-12-24 08:45:29 · 415 阅读 · 0 评论 -
看图轻松理解数据结构与算法系列(选择排序)
前言推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。选择排序选择排序是一种很简单直观的排序算法,主要思想就是每次从待排序的元素中选择出最大或最小的那个元素,然后将其放至已排序序列的末尾,直到全部待排序序列都排序完毕。排序要点初始状...原创 2018-08-16 08:25:24 · 597 阅读 · 0 评论 -
新书上市|《图解数据结构与算法》,全彩印刷!这是一本轻松学习数据结构与算法的书!
关于这本书我的新书《图解数据结构与算法》上市了,全彩印刷,这本书的写作初衷是为大家提供一种形象且易于理解的方式来学习常见的数据结构和算法,本书采用一步一图的方式来呈现数据结构中常见概念以及算法的步骤,降低了理解难度和阅读压力。对于常见的数据结构和算法的核心思想,我们更希望从感性的角度来理解把握,从而能够在不同的场景中知道要使用怎样的数据结构和算法。这也是本书的写作意图,作者希望不管是刚入行的程...原创 2020-04-08 08:12:48 · 921 阅读 · 0 评论 -
看图轻松理解数据结构与算法系列(希尔排序)
前言推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。希尔排序希尔排序是希尔(Donald Shell)提出的一种排序方法,也属于插入排序,但是简单插入排序的高效版本,也称为缩小增量排序。基本思想是将待排序元素进行增量分组,然后在分组组内进行插入排序,随着...原创 2018-09-27 08:32:52 · 520 阅读 · 0 评论 -
2018汇总数据结构算法篇
看图轻松理解数据结构和算法系列(数组)看图轻松理解数据结构与算法系列(单向链表)看图轻松理解数据结构与算法系列(双向链表)看图轻松理解数据结构与算法系列(基于数组的栈)看...原创 2019-01-02 09:39:04 · 274 阅读 · 0 评论 -
看图轻松理解数据结构与算法系列(双向链表)
前言推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。双向链表双向链表属于链表的一种,也叫双链表双向即是说它的链接方向是双向的,它由若干个节点组成,每个节点都包含下一个节点和上一个节点的指针,所以从双向链表的任意节点开始,都能很方便访问他的前驱结...原创 2018-07-29 09:41:57 · 979 阅读 · 0 评论 -
2018汇总数据结构算法篇
看图轻松理解数据结构和算法系列(数组) 看图轻松理解数据结构与算法系列(单向链表) 看图轻松理解数据结构与算法系列(双向链表) 看图轻松理解数据结构与算法系列(基于数组的栈) 看图轻松理解数据结构与算法系列(二叉搜索树) 看图轻松理解数据结构与算法系列(AVL树) 看图轻松理解数据结构与算法系列(选择排序) 看图轻松理解数据结构与算法系...原创 2019-01-02 09:42:26 · 375 阅读 · 0 评论 -
看图轻松理解数据结构与算法系列(B树的删除)
删除操作删除操作比较复杂,主要是因为删除的项可能在叶子节点上也可能在非叶子节点上,而且删除后可能导致不符合B树的规定,这里暂且称之为导致B树不平衡,于是要进行一些合并、左旋、右旋等操作,使之符合B树的规定(即让B树平衡)。另外,如果是删除非叶子节点项需要先找到中序前驱来替换。情况一要删除的项在叶子节点上且不影响B树的平衡结构,比如删除“I”,从根节点开始查找,“I”大于“D”,往第...原创 2018-09-10 08:28:52 · 1030 阅读 · 0 评论 -
看图轻松理解数据结构与算法系列(AVL树)
前言推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。AVL树AVL树,也称平衡二叉搜索树,AVL是其发明者姓名简写。AVL树属于树的一种,而且它也是一棵二叉搜索树,不同的是他通过一定机制能保证二叉搜索树的平衡,平衡的二叉搜索树的查询效率更高。...原创 2018-08-09 08:26:23 · 1141 阅读 · 0 评论 -
看图轻松理解数据结构与算法系列(NoSQL存储-LSM树)
前言推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。关于LSM树LSM树,即日志结构合并树(Log-Structured Merge-Tree)。其实它并不属于一个具体的数据结构,它更多是一种数据结构的设计思想。大多NoSQL数据库核心思想都是基于LSM...原创 2018-10-09 08:31:53 · 890 阅读 · 1 评论 -
看图轻松理解数据结构与算法系列(基于数组的栈)
前言推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。栈栈是一种线性存储结构且运算受限的线性表,它的插入和删除运算操作被限制在表的一端,该端称为栈顶,而另外一端则称为栈底。栈中的数据以后进先出(Last In First Out 即LIFO)...原创 2018-08-04 09:39:36 · 446 阅读 · 0 评论 -
看图轻松理解数据结构与算法系列(快速排序)
前言推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。快速排序快速排序由C.A.R.Hoare在1962年提出,是冒泡排序的一种改进。其基本思想为:通过一趟排序将待排序数据分割成独立的两部分,其中一部分的所有值都比另一部分的所有值都小,然后再对分割的两部分...原创 2018-10-29 08:37:02 · 482 阅读 · 1 评论 -
看图轻松理解数据结构与算法系列(B+树)
前言推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。B+树B+树是B树的一种变体,也属于平衡多路查找树,大体结构与B树相同,包含根节点、内部节点和叶子节点。多用于数据库和操作系统的文件系统中,由于B+树内部节点不保存数据,所以能在内存中存放更多...原创 2018-09-06 08:28:39 · 1030 阅读 · 4 评论 -
看图轻松理解数据结构与算法系列(二叉搜索树)
前言推出一个新系列,《看图轻松理解数据结构和算法》,主要使用图片来描述常见的数据结构和算法,轻松阅读并理解掌握。本系列包括各种堆、各种队列、各种列表、各种树、各种图、各种排序等等几十篇的样子。关于树对于树的数据结构大家都了解,只是树的类型有很多,所以可能又会对树产生一种陌生感。树其实就是由有限n(n>=1)个节点组成的一个具有层次关系的集合,它看起来像一棵倒挂的树,所以称之为...原创 2018-08-01 08:25:16 · 860 阅读 · 0 评论