贪心算法: 如何用贪心算法实现Huffman压缩编码

------ 本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程 ------ 今天来学习贪心算法(greedy algorithm)。贪心算法有很多经典的应用,比如霍夫曼编码(Huffman Coding)、Prim 和 Kruskal最小生成树算法、还有 Dijkstra 单源最短路...

2019-02-14 13:46:48

阅读数 10

评论数 0

AC自动机:如何用多模式串匹配实现敏感词过滤功能

------ 本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程 ------ 很多支持用户发表文本内容的网站,比如BBS,大都会有敏感词过滤功能,用来过滤掉用户输入的一些反动谩骂等内容。你有没有想过,这个功能是怎么实现的呢? 实际上,这些功能最基本的原理就是字符串匹配算法,也就是通...

2019-02-13 10:59:10

阅读数 9

评论数 0

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

------ 本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程 ------ 搜索引擎的搜索关键词提示功能,你应该不陌生吧!当你在搜索引擎的搜索框上,输入要搜索的文字的某一部分的时候,搜索引擎就会自动弹出下拉框,里面是各种关键词提示。你可以直接从下拉框中选择你要搜索的东西。 尽管这个功...

2019-01-30 14:58:29

阅读数 39

评论数 0

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

------ 本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程 ------ 上一节我们讲了BM算法,尽管它很复杂,也不好理解,但却是工程中非常常用的的一种高效字符串匹配算法。有统计说,它是最高效,最常用的字符串匹配算法。不过,在所有字符串匹配算法里,要说最知名的一种的话,那就非KM...

2019-01-29 16:19:05

阅读数 16

评论数 0

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

------ 本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程 ------ 文本编辑器中的查找功能,我想你应该很熟悉吧?比如,我在Word 中把一个单词统一替换成另一个,用的就是这个功能。你有没有想过,它是怎么实现的呢? 当然,你用上一节讲的BF算法和PK算法,也可以实现这个功能...

2019-01-28 10:03:28

阅读数 59

评论数 0

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

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

2019-01-26 09:13:35

阅读数 34

评论数 0

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

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

2019-01-25 09:42:54

阅读数 87

评论数 0

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

------ 本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程 ------ 在微博中,两个人可以互相关注;在微信中,两个人可以互加好友。那你知道,如何存储微博、微信等这些社交网络的好友关系吗? 这就要用到我们今天要讲的这种数据结构:图。实际上,涉及图的算法有很多,也非常复杂,比如图的...

2019-01-24 13:51:24

阅读数 95

评论数 0

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

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

2019-01-23 15:11:14

阅读数 54

评论数 0

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

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

2019-01-22 10:23:50

阅读数 48

评论数 0

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

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

2019-01-21 11:17:15

阅读数 19

评论数 0

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

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

2019-01-19 15:15:39

阅读数 22

评论数 0

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

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

2019-01-19 09:55:40

阅读数 24

评论数 0

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

------ 本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程 ------ 上一节学习的树、二叉树以及二叉树的遍历,今天我们再来学习一种特殊的二叉树——二叉查找树。它的最大特点是支持动态数据集合的快速插入、删除、查找操作。 我们之前说过,散列表也支持这些操作,并且散列表的这些操作...

2019-01-18 11:00:46

阅读数 43

评论数 0

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

------本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程------ 带着下面的问题,来学习今天的内容:二叉树有哪几种存储方式?什么样的二叉树适合用数组来存储? 树(Tree) 先看下什么是“树”?观察下图,你来看盾树有什么特征? “树”这种数据结构真的很像我们现实生活中的...

2019-01-16 11:50:41

阅读数 32

评论数 0

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

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

2019-01-14 15:57:05

阅读数 51

评论数 0

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

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

2019-01-11 15:38:13

阅读数 67

评论数 0

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

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

2019-01-04 15:09:19

阅读数 43

评论数 0

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

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

2019-01-03 15:17:38

阅读数 31

评论数 0

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

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

2019-01-02 16:11:25

阅读数 51

评论数 0

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