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

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

2019-01-24 13:51:24

阅读数 8

评论数 0

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

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

2019-01-23 15:11:14

阅读数 7

评论数 0

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

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

2019-01-22 10:23:50

阅读数 10

评论数 0

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

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

2019-01-21 11:17:15

阅读数 13

评论数 0

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

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

2019-01-19 15:15:39

阅读数 20

评论数 0

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

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

2019-01-19 09:55:40

阅读数 20

评论数 0

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

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

2019-01-18 11:00:46

阅读数 26

评论数 0

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

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

2019-01-16 11:50:41

阅读数 22

评论数 0

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

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

2019-01-14 15:57:05

阅读数 48

评论数 0

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

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

2019-01-11 15:38:13

阅读数 50

评论数 0

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

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

2019-01-04 15:09:19

阅读数 36

评论数 0

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

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

2019-01-03 15:17:38

阅读数 24

评论数 0

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

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

2019-01-02 16:11:25

阅读数 44

评论数 0

跳表:为什么Reids一定要用跳表来实现有序集合

本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程 上两节讲了二分查找算法,它的底层是依赖数组来实现的。如果数据存储在链表中,就真的没法用二分查找了吗? 实现上我们只需要对链表稍加改造,就可以支持类似“二分”的查找算法。我们把改造之后的数据结构叫作跳表(Skip list)。它是一种...

2018-12-28 17:05:50

阅读数 19

评论数 0

二分查找(下):如何快速定位IP对应的省份地址?

本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程 通过IP地址来查找IP归属地功能,不知道你用过没?没用过也没关系,打开百度,在搜索框里随便输入一个IP地址,就会看到它的归属地。 这个功能并不复杂,它是通过维护一个很大的IP地址库来实现。地址库中包括IP地址范围和归属地的对应关系。...

2018-12-26 16:36:03

阅读数 35

评论数 0

二分查找(上):如何用最省内存的方式实现快速查找功能

本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程 今天先提一个问题:如何设计数据结构和算法,快速判断某个整数是否出现在这100万数据中?带着这个问题,咱们来学习下二分查找(Binary Search)。 无处不在的二分思想 二分查找是一种非常简单易懂的查找算法,生活中到处可见。比如说,...

2018-12-25 16:48:26

阅读数 38

评论数 0

排序优化:如何实现一个通用的、高性能的排序函数

本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程 如何实现一个通用的、高性能的排序函数? 如何选择合适的排序算法? 如果要实现一个通用的、高效率的排序函数,我们应该选择哪种排序算法?我们先回顾一下前面讲过的几种排序算法。 我们前面讲过的,线性排序的时间复杂度较低,适用场景比较特殊,所以...

2018-12-24 17:56:06

阅读数 16

评论数 0

线性排序:如何根据年龄给100万用户的数据排序?

本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程 本节讲三种时间复杂度是O(n)的排序算法:桶排序、计数排序、基数排序。因为这些排序的时间复杂度是线性的,所以我们把这类排序算法叫作线性排序(Linear sort)。这三个算法不涉及元素之间的比较操作,是非基于比较的排序算法。 先给...

2018-12-22 15:39:15

阅读数 23

评论数 0

排序(下):归并排序和快速排序

本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程 归并排序和快速排序,是两种时间复杂度为O(nlogn)的排序,适合大规模的排序,比上节所说的三种排序(冒泡、插入、选择)更常用 归并排放的原理 归并排序(Merge Sort ) 的核心思想还是蛮满意的。如果要排序一个数组,我们先...

2018-12-20 12:31:30

阅读数 38

评论数 0

递归:如何用三行代码找到“最终推荐人”?

本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程 有这么一个运用场景,某APP,用户A推荐了用户B,用户B又推荐了用户C。那C的最终推荐人就是A,B的最终推荐人也是A,而用户A没有最终推荐人。 在数据库表中,我们可以记录现行数据,其中actor_id表示用户id,referrer_...

2018-12-17 15:21:56

阅读数 53

评论数 0

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