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

数据结构与算法

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

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

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

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

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

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

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

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

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

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

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

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

数据结构与算法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)。之所以能做到线性的时间复杂度,主要原因是,这三个算法是非基于比较的排序算法,

点击下拉
用户登录