文章分类 -  极客时间

摘要:上两节,我们依次讲了树、二叉树、二叉查找树。二叉查找树是最常用的一种二叉树,它支持快速插入、删除、查找操作,各个操作的时间复杂度跟树的高度成正比,理想情况下,时间复杂度是O(logn)。 不过,二叉查找树在频繁的动态更新过程中,可能会出现树的高度远大于log2n的情况,从而导致各个操作的效率下降。极 阅读全文
posted @ 2022-12-30 15:20 易先讯 阅读(19) 评论(0) 推荐(0)
摘要:上一节我们学习了树、二叉树以及二叉树的遍历,今天我们再来学习一种特殊的二叉树,二叉查找树。二叉查找树最大的特点就是,支持动态数据集合的快速插入、删除、查找操作。 我们之前说过,散列表也是支持这些操作的,并且散列表的这些操作比二叉查找树更高效,时间复杂度是O(1)。既然有了这么高效的散列表,使用二叉树 阅读全文
posted @ 2022-12-30 15:20 易先讯 阅读(18) 评论(0) 推荐(0)
摘要:前面我们讲的都是线性表结构,栈、队列等等。今天我们讲一种非线性表结构,树。树这种数据结构比线性表的数据结构要复杂得多,内容也比较多,所以我会分四节来讲解。 我反复强调过,带着问题学习,是最有效的学习方式之一,所以在正式的内容开始之前,我还是给你出一道思考题:二叉树有哪几种存储方式?什么样的二叉树适合 阅读全文
posted @ 2022-12-30 15:19 易先讯 阅读(24) 评论(0) 推荐(0)
摘要:上一节,我讲了哈希算法的四个应用,它们分别是:安全加密、数据校验、唯一标识、散列函数。今天,我们再来看剩余三种应用:负载均衡、数据分片、分布式存储。 你可能已经发现,这三个应用都跟分布式系统有关。没错,今天我就带你看下,哈希算法是如何解决这些分布式问题的。 应用五:负载均衡 我们知道,负载均衡算法有 阅读全文
posted @ 2022-12-30 15:19 易先讯 阅读(5) 评论(0) 推荐(0)
摘要:还记得2011年CSDN的“脱库”事件吗?当时,CSDN网站被黑客攻击,超过600万用户的注册邮箱和密码明文被泄露,很多网友对CSDN明文保存用户密码行为产生了不满。如果你是CSDN的一名工程师,你会如何存储用户密码这么重要的数据吗?仅仅MD5加密一下存储就够了吗? 要想搞清楚这个问题,就要先弄明白 阅读全文
posted @ 2022-12-30 15:11 易先讯 阅读(7) 评论(0) 推荐(0)
摘要:我们已经学习了20节内容,你有没有发现,有两种数据结构,散列表和链表,经常会被放在一起使用。你还记得,前面的章节中都有哪些地方讲到散列表和链表的组合使用吗?我带你一起回忆一下。 在链表那一节,我讲到如何用链表来实现LRU缓存淘汰算法,但是链表实现的LRU缓存淘汰算法的时间复杂度是O(n),当时我也提 阅读全文
posted @ 2022-12-30 15:11 易先讯 阅读(8) 评论(0) 推荐(0)
摘要:通过上一节的学习,我们知道,散列表的查询效率并不能笼统地说成是O(1)。它跟散列函数、装载因子、散列冲突等都有关系。如果散列函数设计得不好,或者装载因子过高,都可能导致散列冲突发生的概率升高,查询效率下降。 在极端情况下,有些恶意的攻击者,还有可能通过精心构造的数据,使得所有的数据经过散列函数之后, 阅读全文
posted @ 2022-12-30 15:10 易先讯 阅读(3) 评论(0) 推荐(0)
摘要:Word这种文本编辑器你平时应该经常用吧,那你有没有留意过它的拼写检查功能呢?一旦我们在Word里输入一个错误的英文单词,它就会用标红的方式提示“拼写错误”。Word的这个单词拼写检查功能,虽然很小但却非常实用。你有没有想过,这个功能是如何实现的呢? 其实啊,一点儿都不难。只要你学完今天的内容,散列 阅读全文
posted @ 2022-12-30 15:10 易先讯 阅读(12) 评论(0) 推荐(0)
摘要:上两节我们讲了二分查找算法。当时我讲到,因为二分查找底层依赖的是数组随机访问的特性,所以只能用数组来实现。如果数据存储在链表中,就真的没法用二分查找算法了吗? 实际上,我们只需要对链表稍加改造,就可以支持类似“二分”的查找算法。我们把改造之后的数据结构叫做跳表(Skip list),也就是今天要讲的 阅读全文
posted @ 2022-12-30 15:10 易先讯 阅读(6) 评论(0) 推荐(0)
摘要:通过IP地址来查找IP归属地的功能,不知道你有没有用过?没用过也没关系,你现在可以打开百度,在搜索框里随便输一个IP地址,就会看到它的归属地。 这个功能并不复杂,它是通过维护一个很大的IP地址库来实现的。地址库中包括IP地址范围和归属地的对应关系。 当我们想要查询202.102.133.13这个IP 阅读全文
posted @ 2022-12-30 15:09 易先讯 阅读(13) 评论(0) 推荐(0)
摘要:今天我们讲一种针对有序数据集合的查找算法:二分查找(Binary Search)算法,也叫折半查找算法。二分查找的思想非常简单,很多非计算机专业的同学很容易就能理解,但是看似越简单的东西往往越难掌握好,想要灵活应用就更加困难。 老规矩,我们还是来看一道思考题。 假设我们有1000万个整数数据,每个数 阅读全文
posted @ 2022-12-30 15:08 易先讯 阅读(4) 评论(0) 推荐(0)
摘要:几乎所有的编程语言都会提供排序函数,比如C语言中qsort(),C++ STL中的sort()、stable_sort(),还有Java语言中的Collections.sort()。在平时的开发中,我们也都是直接使用这些现成的函数来实现业务逻辑中的排序功能。那你知道这些排序函数是如何实现的吗?底层都 阅读全文
posted @ 2022-12-30 15:07 易先讯 阅读(3) 评论(0) 推荐(0)
摘要:上两节中,我带你着重分析了几种常用排序算法的原理、时间复杂度、空间复杂度、稳定性等。今天,我会讲三种时间复杂度是O(n)的排序算法:桶排序、计数排序、基数排序。因为这些排序算法的时间复杂度是线性的,所以我们把这类排序算法叫作线性排序(Linear sort)。之所以能做到线性的时间复杂度,主要原因是 阅读全文
posted @ 2022-12-30 15:06 易先讯 阅读(5) 评论(0) 推荐(0)
摘要:上一节我讲了冒泡排序、插入排序、选择排序这三种排序算法,它们的时间复杂度都是O(n2),比较高,适合小规模数据的排序。今天,我讲两种时间复杂度为O(nlogn)的排序算法,归并排序和快速排序。这两种排序算法适合大规模的数据排序,比上一节讲的那三种排序算法要更常用。 归并排序和快速排序都用到了分治思想 阅读全文
posted @ 2022-12-30 15:05 易先讯 阅读(15) 评论(0) 推荐(0)
摘要:排序对于任何一个程序员来说,可能都不会陌生。你学的第一个算法,可能就是排序。大部分编程语言中,也都提供了排序函数。在平常的项目中,我们也经常会用到排序。排序非常重要,所以我会花多一点时间来详细讲一讲经典的排序算法。 排序算法太多了,有很多可能你连名字都没听说过,比如猴子排序、睡眠排序、面条排序等。我 阅读全文
posted @ 2022-12-30 15:01 易先讯 阅读(4) 评论(0) 推荐(0)
摘要:推荐注册返佣金的这个功能我想你应该不陌生吧?现在很多App都有这个功能。这个功能中,用户A推荐用户B来注册,用户B又推荐了用户C来注册。我们可以说,用户C的“最终推荐人”为用户A,用户B的“最终推荐人”也为用户A,而用户A没有“最终推荐人”。 一般来说,我们会通过数据库来记录这种推荐关系。在数据库表 阅读全文
posted @ 2022-12-30 15:01 易先讯 阅读(4) 评论(0) 推荐(0)
摘要:我们知道,CPU资源是有限的,任务的处理速度与线程个数并不是线性正相关。相反,过多的线程反而会导致CPU频繁切换,处理性能下降。所以,线程池的大小一般都是综合考虑要处理任务的特点和硬件环境,来事先设置的。 当我们向固定大小的线程池中请求一个线程时,如果线程池中没有空闲资源了,这个时候线程池如何处理这 阅读全文
posted @ 2022-12-30 15:01 易先讯 阅读(4) 评论(0) 推荐(0)
摘要:浏览器的前进、后退功能,我想你肯定很熟悉吧? 当你依次访问完一串页面a-b-c之后,点击浏览器的后退按钮,就可以查看之前浏览过的页面b和a。当你后退到页面a,点击前进按钮,就可以重新查看页面b和c。但是,如果你后退到页面b后,点击了新的页面d,那就无法再通过前进、后退功能查看页面c了。 假设你是Ch 阅读全文
posted @ 2022-12-30 15:00 易先讯 阅读(9) 评论(0) 推荐(0)
摘要:上一节我讲了链表相关的基础知识。学完之后,我看到有人留言说,基础知识我都掌握了,但是写链表代码还是很费劲。哈哈,的确是这样的! 想要写好链表代码并不是容易的事儿,尤其是那些复杂的链表操作,比如链表反转、有序链表合并等,写的时候非常容易出错。从我上百场面试的经验来看,能把“链表反转”这几行代码写对的人 阅读全文
posted @ 2022-12-30 14:59 易先讯 阅读(12) 评论(0) 推荐(0)
摘要:今天我们来聊聊“链表(Linked list)”这个数据结构。学习链表有什么用呢?为了回答这个问题,我们先来讨论一个经典的链表应用场景,那就是LRU缓存淘汰算法。 缓存是一种提高数据读取性能的技术,在硬件设计、软件开发中都有着非常广泛的应用,比如常见的CPU缓存、数据库缓存、浏览器缓存等等。 缓存的 阅读全文
posted @ 2022-12-30 14:59 易先讯 阅读(8) 评论(0) 推荐(0)