自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 Trie 树:如何实现搜索引擎的搜索关键词提示功能

------ 本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程 ------搜索引擎的搜索关键词提示功能,你应该不陌生吧!当你在搜索引擎的搜索框上,输入要搜索的文字的某一部分的时候,搜索引擎就会自动弹出下拉框,里面是各种关键词提示。你可以直接从下拉框中选择你要搜索的东西。尽管这个功能我们几乎天天在用,作为一名工程师,你是否思考过,它是怎么实现的呢?它底层使用的是哪一种数据结构和算法...

2019-01-30 14:58:29 1620

原创 字符串匹配基础(下):如何借助BM算法轻松理解KMP算法?

------ 本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程 ------上一节我们讲了BM算法,尽管它很复杂,也不好理解,但却是工程中非常常用的的一种高效字符串匹配算法。有统计说,它是最高效,最常用的字符串匹配算法。不过,在所有字符串匹配算法里,要说最知名的一种的话,那就非KMP算法莫属。很多时候,提到字符串匹配,我们首先想到的就是KMP算法。尽管在实际开发中,我们几乎不大可能...

2019-01-29 16:19:05 805

原创 字符串匹配基础(中):如何实现文本编辑器的查找功能?

------ 本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程 ------文本编辑器中的查找功能,我想你应该很熟悉吧?比如,我在Word 中把一个单词统一替换成另一个,用的就是这个功能。你有没有想过,它是怎么实现的呢?当然,你用上一节讲的BF算法和PK算法,也可以实现这个功能,但是在某些极端情况下,BF算法性能会退化的比较严重,而PK算法需要用到哈希算法,而设计一个可以泽各种类型...

2019-01-28 10:03:28 2582 1

原创 字符串匹配基础(上):如何借助哈希算法实现高效字符串匹配?

------ 本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程 ------字符串匹配这样一个功能,我想对于任何一个开发工程师来说,应该都不会陌生。我们用的最多的就是编程语言提供的字符串查找函数,比如Java中的 indexOf(),Python 中的find()函数等,它们底层就是依赖接下来要讲的字符串匹配算法。字符串匹配算法很多,我会分四节来讲。今天讲两种比较简单的、好理解的,...

2019-01-26 09:13:35 3113

原创 深度和广度优先搜索:如何找出社交网络中的三度好友关系

------ 本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程 ------上了节我们讲了图的表示方法,讲到如何用有向图、无向图来表示一个社交网络。在社交网络中,有一个六度分割理论,具体说,你与世界上另一个人间隔的关系不会超过六度,也就是说平均只需要六步就可以联系到任何两个互不相识的人。一个用户的一度连接用户很好理解,就是他的好友,二度连接用户就是他好友的好友,硬度连接用户就是他好...

2019-01-25 09:42:54 2001

原创 图的表示:如何存储微博、微信等社交网络中的好友关系?

------ 本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程 ------在微博中,两个人可以互相关注;在微信中,两个人可以互加好友。那你知道,如何存储微博、微信等这些社交网络的好友关系吗?这就要用到我们今天要讲的这种数据结构:图。实际上,涉及图的算法有很多,也非常复杂,比如图的搜索、最短路径、最小生成树、二分图等等。我们今天聚集在图存储这一方面,后面会分好几节依次讲解图相差的算...

2019-01-24 13:51:24 4753 4

原创 堆的应用:如何快速获取到 Top 10 最热闹的搜索关键词

------ 本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程 ------搜索引擎热闹搜索排行榜功能你用过吗?你知道这个功能是如何实现的吗?实际上,它的实现并不复杂。搜索引擎每天会接收大量用户的搜索请求,它会把这些用户搜索的关键词记录下来,然后再离线地统计分析,得到最热闹的 Top 10 搜索关键词。那请你思考一**,假设现在我们有一个包含10亿个搜索关键词的日志文件,如何能快速...

2019-01-23 15:11:14 862

原创 堆和堆排序:为什么说堆排序没有快速排序快

------ 本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程 ------我们今天讲另外一种特殊的树,“堆(Heap)”。堆这种数据结构的应用场景非常多,最经典的莫过于堆排序了。堆排序是一种原地的、时间复杂度为O(nlogn)的排序算法。前面我们学过快速排序,平均情况下,它的时间复杂度为O(logn)。尽管这两种排序算法的时间复杂度都是O(nlogn),甚至堆排序比快速排序的时间...

2019-01-22 10:23:50 10905 5

原创 递归树: 如何借助树来求解递归算法的时间复杂度

------ 本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程 ------今天,来讲树这种数据结构的一种特殊的应用,递归树。我们都知道,递归代码的时间复杂度分析起来很麻烦,我们在排序(下)那里讲过,如何利用递推公式,求解归并排序的时间复杂度,但是,有此情况,比如快排的平均时间复杂度的分析,用递推公式的话,会涉及非常复杂的数学推导。除了用递推公式这种复杂的分析方法,有没有更简单的...

2019-01-21 11:17:15 12044 1

原创 红黑树(下):掌握这些技巧,你也可以实现一个红黑树

上一节,我们讲到红黑树定义的时候,提到红黑树的叶子都是黑色的空节点。当时我只是粗略地解释了,这是为了代码实现方便,那更加确切的原因是什么呢?实现红黑树的基本思想实际上,红黑树的平衡过程跟魔方复原很神似,大致过程是:遇到什么样的节点排布,我们就对应怎么去调整。只要按照这些固定的规则来操作,就能将一个非平衡的红黑树调整成平衡的。还记得我们前面讲过的红黑树的定义吧,今天的内容,我们会频繁用到它,所...

2019-01-19 15:15:39 462

原创 红黑树(上):为什么工程中都用红黑树这种二叉树

------ 本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程 ------上节讲到二叉查找树在频繁的动态更新的过程中,可能会出现树的高度远大于log2n的情况,从而导致操作的效率下降。极端情况下,二叉树会退化为链表,时间复杂度退化为O(n)。为解决这个问题,就用到红黑村。在实际开发中,为什么喜欢用红黑树,而不是其他的平衡二叉查找树呢?什么是平衡二叉查找树?平衡二叉树的严格定义是...

2019-01-19 09:55:40 2165

原创 二叉树基础(下):有了如此高效的散列表,为什么还需要二叉树

------ 本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程 ------上一节学习的树、二叉树以及二叉树的遍历,今天我们再来学习一种特殊的二叉树——二叉查找树。它的最大特点是支持动态数据集合的快速插入、删除、查找操作。我们之前说过,散列表也支持这些操作,并且散列表的这些操作比二叉查找树更高效,时间复杂度是O(1)。既然有了这么高效的散列表,使用二叉树的地方是不是都可以替换成散列...

2019-01-18 11:00:46 1128

原创 二叉权基础(上):什么样的二叉树适合用数组来存储

------本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程------带着下面的问题,来学习今天的内容:二叉树有哪几种存储方式?什么样的二叉树适合用数组来存储?树(Tree)先看下什么是“树”?观察下图,你来看盾树有什么特征?“树”这种数据结构真的很像我们现实生活中的“树”,这里面每个元素我们叫作“节点”;用来连线相邻节点之间的关系,我们叫作“父子关系”。比如下图中,A节点...

2019-01-16 11:50:41 1040

原创 哈希算法(下):哈希算法在分布式系统中有哪些应用?

------本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程------这一节来说说哈希算法的另外三种应用:负载均衡、数据分片、分布式存储。其实这三个应用都跟分布式系统有关。今天就看一下,哈希算法是如何解决这些分布式问题的。应用五:负载均衡我们知道,负载均衡算法很多,比如轮询、随机、加权轮询等。那如何才能实现一个会话粘滞(session sticky)的负载均衡算法呢?也就是说,...

2019-01-14 15:57:05 766

原创 哈希算法(上):如何防止数据库中的用户信息被脱库?

本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程哈希算法历史悠久,业界著名的哈希算法也很多,比如MD5、SHA等。在我们平时的开发中,基本上都是拿现成的直接用。今天不会重点剖析哈希算法的原理,也不会教你如何设计一个哈希算法,而是从实战角度告诉你,在实际开发中,我们该如何用哈希算法解决问题。什么是哈希算法?我们前面讲到的“散列表”、“散列函数”,这里又讲到“哈希算法”,你是不是有点...

2019-01-11 15:38:13 1806

原创 散列表(下):为什么散列表和链表经常会一起使用

本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程散列表和链表,经常会被放在一起使用,在链表那一节,我们讲到,LRU淘汰算法的时间复杂度是O(n),当时我也提到,通过散列表可以将这个时间复杂度降低到O(1)。跳表那一节,我提到Redis的有序集合是使用跳表来实现了,跳表可以卸任一种改进版的链表。Redis的有序集合不仅使用了跳表,还用到了散列表。除此之外,Java中LinkedHa...

2019-01-04 15:09:19 1402

原创 散列表(中):如何打造一个工业级水平的散列表?

本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程通过上一节的学习,我们知道,散列表的查询不能笼统的说是O(1)。它跟散列函数、装载因子、散列冲突等都有关系。如果散列表设计得不好,或者装载因子过高,都可能导致散列冲突发生的概率升高,查询效率下降。在极端的情况下,有些恶意攻击,还可能通过精心构造的数据,使得所有的数据经过散列之后,都散列到同一个槽里。如果我们使用的是基于链表的冲突解决方...

2019-01-03 15:17:38 456

原创 散列表(上):Word 文档中单词拼写检查功能是如何实现的?

本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程在平时我们使用Word的时候,输入一个错误的单词,它就会用标红的方式提示“拼写错误”。Word的这个单词拼写检查功能,虽然很小却非常实用,它是怎么实现的呢?其实一点儿都不难,只要你学习今天的内容,散列表(Hash Table)。你就能像微软Office的工程师一样,轻松实现这个功能。散列思想散列表的英文叫“Hash Table”,...

2019-01-02 16:11:25 1327

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除