2,3,4,5,6,7,8,9,10,11,12,13,14
当前位置: 首页  - 作者"沐尘"  - 列表 - 第3页
数据结构与算法28 | 堆和堆排序:为什么说堆排序没有快速排序快?

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

我们今天讲另外一种特殊的树,“堆”(Heap)。堆这种数据结构的应用场景非常多,最经典的莫过于堆排序了。堆排序是一种原地的、时间复杂度为 O(nlogn) 的排序算法。前面我们学过快速排序,平均情况下,它的时间复杂度为 O(nlogn)。尽管这两种排序算法的时间复杂度都是 O(nlogn),甚至堆排序比快速排序的时间复杂度还要稳定,但是,

数据结构与算法27 | 递归树:如何借助树来求解递归算法的时间复杂度?

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

今天,我们来讲这种数据结构的一种特殊应用,递归树。我们都知道,递归代码的时间复杂度分析起来很麻烦。我们在第 12 节《排序(下)》那里讲过,如何利用递推公式,求解归并排序、快速排序的时间复杂度,但是,有些情况,比如快排的平均时间复杂度的分析,用递推公式的话,会涉及非常复杂的数学推导。除了用递推公式这种比较复杂的分析方法,有没有更简单的方法

数据结构与算法26 | 红黑树(下):掌握这些技巧,你也可以实现一个红黑树

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

红黑树是一个让我又爱又恨的数据结构,“爱”是因为它稳定、高效的性能,“恨”是因为实现起来实在太难了。我今天讲的红黑树的实现,对于基础不太好的同学,理解起来可能会有些困难。但是,我觉得没必要去死磕它。我为什么这么说呢?因为,即便你将左右旋背得滚瓜烂熟,我保证你过不几天就忘光了。因为,学习红黑树的代码实现,对于你平时做项目开发没有太大帮助。对

数据结构与算法25 | 红黑树(上):为什么工程中都用红黑树这种二叉树?

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

上两节,我们依次讲了树、二叉树、二叉查找树。二叉查找树是最常用的一种二叉树,它支持快速插入、删除、查找操作,各个操作的时间复杂度跟树的高度成正比,理想情况下,时间复杂度是 O(logn)。不过,二叉查找树在频繁的动态更新过程中,可能会出现树的高度远大于 log2n 的情况,从而导致各个操作的效率下降。极端情况下,二叉树会退化为链表,时间复

数据结构与算法24 | 二叉树基础(下):有了如此高效的散列表,为什么还需要二叉树?

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

上一节我们学习了树、二叉树以及二叉树的遍历,今天我们再来学习一种特殊的二叉树,二叉查找树。二叉查找树最大的特点就是,支持动态数据集合的快速插入、删除、查找操作。我们之前说过,散列表也是支持这些操作的,并且散列表的这些操作比二叉查找树更高效,时间复杂度是 O(1)。既然有了这么高效的散列表,使用二叉树的地方是不是都可以替换成散列表呢?有没有

数据结构与算法23 | 二叉树基础(上):什么样的二叉树适合用数组来存储?

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

前面我们讲的都是线性表结构,栈、队列等等。今天我们讲一种非线性表结构,树。树这种数据结构比线性表的数据结构要复杂得多,内容也比较多,所以我会分四节来讲解。前面我们讲的都是线性表结构,栈、队列等等。今天我们讲一种非线性表结构,树。树这种数据结构比线性表的数据结构要复杂得多,内容也比较多,所以我会分四节来讲解。我反复强调过,带着问题学习,是最

数据结构与算法22 | 哈希算法(下):哈希算法在分布式系统中有哪些应用?

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

上一节,我讲了哈希算法的四个应用,它们分别是:安全加密、数据校验、唯一标识、散列函数。今天,我们再来看剩余三种应用:负载均衡、数据分片、分布式存储。你可能已经发现,这三个应用都跟分布式系统有关。没错,今天我就带你看下,哈希算法是如何解决这些分布式问题的。应用五:负载均衡我们知道,负载均衡算法有很多,比如轮询、随机、加权轮询等。那如何才能实

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

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

还记得 2011 年 CSDN 的“脱库”事件吗?当时,CSDN 网站被黑客攻击,超过 600 万用户的注册邮箱和密码明文被泄露,很多网友对 CSDN 明文保存用户密码行为产生了不满。如果你是 CSDN 的一名工程师,你会如何存储用户密码这么重要的数据吗?仅仅 MD5 加密一下存储就够了吗? 要想搞清楚这个问题,就要先弄明白哈希算法。哈希

数据结构与算法20 | 散列表(下):为什么散列表和链表经常会一起使用?

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

我们已经学习了 20 节内容,你有没有发现,有两种数据结构,散列表和链表,经常会被放在一起使用。你还记得,前面的章节中都有哪些地方讲到散列表和链表的组合使用吗?我带你一起回忆一下。我们已经学习了 20 节内容,你有没有发现,有两种数据结构,散列表和链表,经常会被放在一起使用。你还记得,前面的章节中都有哪些地方讲到散列表和链表的组合使用吗?

数据结构与算法19 | 散列表(中):如何打造一个工业级水平的散列表?

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

通过上一节的学习,我们知道,散列表的查询效率并不能笼统地说成是 O(1)。它跟散列函数、装载因子、散列冲突等都有关系。如果散列函数设计得不好,或者装载因子过高,都可能导致散列冲突发生的概率升高,查询效率下降。通过上一节的学习,我们知道,散列表的查询效率并不能笼统地说成是 O(1)。它跟散列函数、装载因子、散列冲突等都有关系。如果散列函数设

点击下拉
用户登录