算法系列--39 回溯算法:从电影《蝴蝶效应》中学习回溯算法的核心思想

整理自极客时间-数据结构与算法之美。原文内容更完整具体,且有音频。购买地址: 前言 深度优先搜索算法利用的是回溯算法思想。它除了用来指导像深度优先搜索这种经典的算法设计之外,还可以用在很多实际的软件开发场景中,比如正则表达式匹配、编译原理中的语法分析等。 除此之外,很多经典的数学问题都可...

2019-03-11 19:55:42

阅读数 29

评论数 0

算法系列--38 分治算法:谈一谈大规模计算框架MapReduce中的分治思想

整理自极客时间-数据结构与算法之美。原文内容更完整具体,且有音频。购买地址: 前言 MapReduce 是 Google 大数据处理的三驾马车之一,另外两个是 GFS 和 Bigtable。它在倒排索引、PageRank 计算、网页分析等搜索引擎相关的技术中都有大量的应用。 尽管开发一个...

2019-03-10 22:39:55

阅读数 36

评论数 0

算法系列--37 贪心算法:如何用贪心算法实现Huffman压缩编码?

整理自极客时间-数据结构与算法之美。原文内容更完整具体,且有音频。购买地址: 前言 贪心算法、分治算法、回溯算法、动态规划是算法思想,并不是具体的算法,常用来指导我们设计具体的算法和编码等。 贪心、分治、回溯、动态规划这 4 个算法思想,原理解释起来都很简单,但是要真正掌握且灵活应用,并...

2019-03-10 15:40:45

阅读数 47

评论数 0

算法系列--36 AC自动机:如何用多模式串匹配实现敏感词过滤功能?

整理自极客时间-数据结构与算法之美。原文内容更完整具体,且有音频。购买地址: 前言 本章有点难,需要多看几遍。 很多支持用户发表文本内容的网站,比如 BBS,大都会有敏感词过滤功能,用来过滤掉用户输入的一些淫秽、反动、谩骂等内容。这个功能是怎么实现的呢? 实际上,这些功能最基本的原理就...

2019-03-09 17:48:18

阅读数 9

评论数 0

算法系列--35 Trie树:如何实现搜索引擎的搜索关键词提示功能?

整理自极客时间-数据结构与算法之美。原文内容更完整具体,且有音频。购买地址: 前言 搜索引擎的搜索关键词提示功能,为了方便快速输入,当你在搜索引擎的搜索框中,输入要搜索的文字的某一部分的时候,搜索引擎就会自动弹出下拉框,里面是各种关键词提示。你可以直接从下拉框中选择你要搜索的东西,而不用把...

2019-03-03 16:50:44

阅读数 136

评论数 0

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

整理自极客时间-数据结构与算法之美。原文内容更完整具体,且有音频。购买地址: 前言 尽管BM 算法很复杂,也不好理解,但却是工程中非常常用的一种高效字符串匹配算法。有统计说,它是最高效、最常用的字符串匹配算法。不过,在所有的字符串匹配算法里,要说最知名的一种的话,那就非 KMP 算法莫属。...

2019-02-26 19:50:37

阅读数 33

评论数 0

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

整理自极客时间-数据结构与算法之美。原文内容更完整具体,且有音频。购买地址: 前言 在 Word 中把一个单词统一替换成另一个,这个功能它是怎么实现的呢? 上一节讲的 BF 算法和 RK 算法,也可以实现这个功能,但是在某些极端情况下,BF 算法性能会退化的比较严重,而 RK 算法需要用...

2019-02-24 13:53:39

阅读数 61

评论数 0

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

整理自极客时间-数据结构与算法之美。原文内容更完整具体,且有音频。购买地址: 前言 字符串匹配算法很多,BF 算法、RK 算法、BM 算法 、KMP 算法。 RK 算法是 BF 算法的改进,它巧妙借助了我们前面讲过的哈希算法,让匹配的效率有了很大的提升。那RK 算法是如何借助哈希算法来实...

2019-02-20 20:27:13

阅读数 29

评论数 0

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

整理自极客时间-数据结构与算法之美。原文内容更完整具体,且有音频。购买地址: 前言 在社交网络中,有一个六度分割理论,具体是说,你与世界上的另一个人间隔的关系不会超过六度,也就是说平均只需要六步就可以联系到任何两个互不相识的人。 一个用户的一度连接用户很好理解,就是他的好友,二度连接用户...

2019-02-20 19:42:45

阅读数 22

评论数 0

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

整理自极客时间-数据结构与算法之美。原文内容更完整具体,且有音频。购买地址: 前言 在微博中,两个人可以互相关注;在微信中,两个人可以互加好友。如何存储微博、微信等这些社交网络的好友关系? 涉及图的算法有很多,也非常复杂,比如图的搜索、最短路径、最小生成树、二分图等等。我们今天聚焦在图存...

2019-02-19 21:01:36

阅读数 49

评论数 0

算法系列29-- 堆的应用:如何快速获取到Top 10最热门的搜索关键词?

整理自极客时间-数据结构与算法之美。原文内容更完整具体,且有音频。购买地址: 前言 搜索引擎每天会接收大量的用户搜索请求,它会把这些用户输入的搜索关键词记录下来,然后再离线地统计分析,得到最热门的 Top 10 搜索关键词。 那请你思考下,假设现在我们有一个包含 10 亿个搜索关键词的日...

2019-02-18 21:01:07

阅读数 60

评论数 0

算法系列28-- 堆和堆排序:为什么说堆排序没有快速排序快?

整理自极客时间-数据结构与算法之美。原文内容更完整具体,且有音频。购买地址: 前言 堆(Heap)这种数据结构的应用场景非常多,最经典的莫过于堆排序了。堆排序是一种原地的、时间复杂度为 O(nlogn) 的排序算法。 快速排序,平均情况下,它的时间复杂度为 O(nlogn)。尽管这两种排...

2019-02-18 17:15:06

阅读数 49

评论数 2

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

整理自极客时间-数据结构与算法之美。原文内容更完整具体,且有音频。购买地址: 前言 递归代码的时间复杂度分析起来很麻烦。《排序(下)》那里讲过,如何利用递推公式,求解归并排序、快速排序的时间复杂度,但是,有些情况,比如快排的平均时间复杂度的分析,用递推公式的话,会涉及非常复杂的数学推导。 ...

2019-02-02 17:24:26

阅读数 55

评论数 0

算法系列--红黑树(上):为什么工程中都用红黑树这种二叉树?

整理自极客时间-数据结构与算法之美。原文内容更完整具体,且有音频。购买地址: 前言 二叉查找树是最常用的一种二叉树,它支持快速插入、删除、查找操作,各个操作的时间复杂度跟树的高度成正比,理想情况下,时间复杂度是 O(logn)。 不过,二叉查找树在频繁的动态更新过程中,可能会出现树的高度...

2019-02-02 10:51:51

阅读数 41

评论数 0

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

整理自极客时间-数据结构与算法之美。原文内容更完整具体,且有音频。购买地址: 前言 二叉查找树最大的特点就是,支持动态数据集合的快速插入、删除、查找操作。 之前说过,散列表也是支持这些操作的,并且散列表的这些操作比二叉查找树更高效,时间复杂度是 O(1)。既然有了这么高效的散列表,使用二...

2019-01-31 20:41:24

阅读数 30

评论数 0

算法系列-- 二叉树基础(上):什么样的二叉树适合用数组来存储?

整理自极客时间-数据结构与算法之美。原文内容更完整具体,且有音频。购买地址: 前言 出一道思考题:二叉树有哪几种存储方式?什么样的二叉树适合用数组来存储? 树(Tree) 什么是“树”?画了几棵“树”。你来看看,这些“树”都有什么特征? “树”这种数据结构真的很像我们现实生活中的...

2019-01-31 17:59:11

阅读数 27

评论数 0

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

整理自极客时间-数据结构与算法之美。原文内容更完整具体,且有音频。购买地址: 什么是哈希算法? 实际上,不管是“散列”还是“哈希”,这都是中文翻译的差别,英文其实就是“Hash”。所以,我们常听到有人把“散列表”叫作“哈希表”“Hash 表”,把“哈希算法”叫作“Hash 算法”或者“散列...

2019-01-31 16:51:00

阅读数 117

评论数 0

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

上一节,我讲了哈希算法的四个应用,它们分别是:安全加密、数据校验、唯一标识、散列函数。今天,我们再来看剩余三种应用:负载均衡、数据分片、分布式存。 应用五:负载均衡 我们知道,负载均衡算法有很多,比如轮询、随机、加权轮询等。那如何才能实现一个会话粘滞(session sticky)的负载均衡算...

2019-01-31 16:28:48

阅读数 30

评论数 0

算法系列-- 散列表(下):为什么散列表和链表经常会一起使用?

整理自极客时间-数据结构与算法之美。原文内容更完整具体,且有音频。购买地址: 前言 散列表和链表,经常会被放在一起使用。 在链表那一节,我讲到如何用链表来实现 LRU 缓存淘汰算法,但是链表实现的 LRU 缓存淘汰算法的时间复杂度是 O(n),当时提到了,通过散列表可以将这个时间复杂度降...

2019-01-31 11:49:10

阅读数 53

评论数 0

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

整理自极客时间-数据结构与算法之美。原文内容更完整具体,且有音频。购买地址: 前言 散列表的查询效率并不能笼统地说成是 O(1)。它跟散列函数、装载因子、散列冲突等都有关系。如果散列函数设计得不好,或者装载因子过高,都可能导致散列冲突发生的概率升高,查询效率下降。 在极端情况下,有些恶意...

2019-01-30 21:10:57

阅读数 41

评论数 0

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