2,3,4,5,6,7,8,9,10,11,12,13,14
当前位置: 首页  - 标签“数据结构与算法“ - 列表 - 第3页

数据结构与算法

数据结构与算法18 | 散列表(上):Word文档中的单词拼写检查功能是如何实现的?

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

Word 这种文本编辑器你平时应该经常用吧,那你有没有留意过它的拼写检查功能呢?一旦我们在 Word 里输入一个错误的英文单词,它就会用标红的方式提示“拼写错误”。Word 的这个单词拼写检查功能,虽然很小但却非常实用。你有没有想过,这个功能是如何实现的呢?其实啊,一点儿都不难。只要你学完今天的内容,散列表(Hash Table)。你就能

数据结构与算法17 | 跳表:为什么Redis一定要用跳表来实现有序集合?

17 | 跳表:为什么Redis一定要用跳表来实现有序集合?

上两节我们讲了二分查找算法。当时我讲到,因为二分查找底层依赖的是数组随机访问的特性,所以只能用数组来实现。如果数据存储在链表中,就真的没法用二分查找算法了吗?实际上,我们只需要对链表稍加改造,就可以支持类似“二分”的查找算法。我们把改造之后的数据结构叫做跳表(Skip list),也就是今天要讲的内容。跳表这种数据结构对你来说,可能会比较

数据结构与算法16 | 二分查找(下):如何快速定位IP对应的省份地址?

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

↵通过 IP 地址来查找 IP 归属地的功能,不知道你有没有用过?没用过也没关系,你现在可以打开百度,在搜索框里随便输一个 IP 地址,就会看到它的归属地。这个功能并不复杂,它是通过维护一个很大的 IP 地址库来实现的。地址库中包括 IP 地址范围和归属地的对应关系。当我们想要查询 202.102.133.13 这个 IP 地址的归属

数据结构与算法15 | 二分查找(上):如何用最省内存的方式实现快速查找功能

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

今天我们讲一种针对有序数据集合的查找算法:二分查找(Binary Search)算法,也叫折半查找算法。二分查找的思想非常简单,很多非计算机专业的同学很容易就能理解,但是看似越简单的东西往往越难掌握好,想要灵活应用就更加困难。老规矩,我们还是来看一道思考题。假设我们有 1000 万个整数数据,每个数据占 8 个字节,如何设计数据结构和算法

数据结构与算法14 | 排序优化:如何实现一个通用的、高性能的排序函数?

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

几乎所有的编程语言都会提供排序函数,比如 C 语言中 qsort(),C++ STL 中的 sort()、stable_sort(),还有 Java 语言中的 Collections.sort()。在平时的开发中,我们也都是直接使用这些现成的函数来实现业务逻辑中的排序功能。那你知道这些排序函数是如何实现的吗?底层都利用了哪种排序算法呢?基

数据结构与算法13 | 线性排序:如何根据年龄给100万用户数据排序?

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

上两节中,我带你着重分析了几种常用排序算法的原理、时间复杂度、空间复杂度、稳定性等。今天,我会讲三种时间复杂度是 O(n) 的排序算法:桶排序、计数排序、基数排序。因为这些排序算法的时间复杂度是线性的,所以我们把这类排序算法叫作线性排序(Linear sort)。之所以能做到线性的时间复杂度,主要原因是,这三个算法是非基于比较的排序算法,

数据结构与算法12 | 排序(下):如何用快排思想在O(n)内查找第K大元素?

12 | 排序(下):如何用快排思想在O(n)内查找第K大元素?

上一节我讲了冒泡排序、插入排序、选择排序这三种排序算法,它们的时间复杂度都是 O(n2),比较高,适合小规模数据的排序。今天,我讲两种时间复杂度为 O(nlogn) 的排序算法,归并排序和快速排序。这两种排序算法适合大规模的数据排序,比上一节讲的那三种排序算法要更常用。归并排序和快速排序都用到了分治思想,非常巧妙。我们可以借鉴这个思想,来

数据结构与算法11 | 排序(上):为什么插入排序比冒泡排序更受欢迎?

11 | 排序(上):为什么插入排序比冒泡排序更受欢迎?

排序对于任何一个程序员来说,可能都不会陌生。你学的第一个算法,可能就是排序。大部分编程语言中,也都提供了排序函数。在平常的项目中,我们也经常会用到排序。排序非常重要,所以我会花多一点时间来详细讲一讲经典的排序算法。排序算法太多了,有很多可能你连名字都没听说过,比如猴子排序、睡眠排序、面条排序等。我只讲众多排序算法中的一小撮,也是最经典的、

数据结构与算法10 | 递归:如何用三行代码找到“最终推荐人”?

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

推荐注册返佣金的这个功能我想你应该不陌生吧?现在很多 App 都有这个功能。这个功能中,用户 A 推荐用户 B 来注册,用户 B 又推荐了用户 C 来注册。我们可以说,用户 C 的“最终推荐人”为用户 A,用户 B 的“最终推荐人”也为用户 A,而用户 A 没有“最终推荐人”。一般来说,我们会通过数据库来记录这种推荐关系。在数据库表中,我

数据结构与算法09 | 队列:队列在线程池等有限资源池中的应用

09 | 队列:队列在线程池等有限资源池中的应用

我们知道,CPU 资源是有限的,任务的处理速度与线程个数并不是线性正相关。相反,过多的线程反而会导致 CPU 频繁切换,处理性能下降。所以,线程池的大小一般都是综合考虑要处理任务的特点和硬件环境,来事先设置的。当我们向固定大小的线程池中请求一个线程时,如果线程池中没有空闲资源了,这个时候线程池如何处理这个请求?是拒绝请求还是排队请求?各种

点击下拉
用户登录