8、外部排序:如何为TB级数据排序

你好,我是微扰君。 之前已经学习了常用数据结构的工业级实现(包括动态数组、双向链表、双端队列、栈、哈希表、红黑树、堆),从今天开始,我们来讲讲一些经典的算法思想在工程实践中的应用。 那讲哪些算法呢?我们都知道算法是一个很大的命题,也有很多分类的方式,...

业务开发算法50讲

7、堆:如何实现一个高效的优先队列

你好,我是微扰君。 上一讲学习了基于红黑树的ordered_map的实现,今天我们来介绍另外一种有趣的树,heap,也就是堆。堆的应用非常广泛,我们常说的堆排序的堆就是指这种树状数据结构,除此之外还可以用来解决诸如TopK,或者合并多个有序小文件之类...

业务开发算法50讲

6、TreeMap:红黑树真的有那么难吗

你好,我是微扰君。 上一讲,我们讲到如何利用散列表解决类似“文档中不同单词计数”的问题,并以JDK中HashMap的实现为例讲解了散列表背后的思想。 单词计数这个问题最基本的解决思路就是建立一个线性的符号表,每次计数的时候,遍历符号表就可以找到对应单...

业务开发算法50讲

5、HashMap:一个优秀的散列表是怎么来的

你好,我是微扰君。 过去四讲我们学习了STL中全部的序列式容器,数组、链表、队列、栈;今天来谈一谈另一类容器,关联式容器。所谓“关联式”,就是存储数据的时候,不只是存储元素的值本身,同时对要存储的元素关联一个键,形成一组键值对。这样在访问的时候,我们...

业务开发算法50讲

4、栈:函数调用的秘密究竟是什么

你好,我是微扰君。 目前为止,我们已经介绍了STL里的大部分序列式容器,包括vector、deque和list,也对应着数组、队列和链表这几种基础数据结构;今天我们来学习最后一种常用的线性数据结构,栈。 栈这个词,相信每一个研发同学在学习编程的过程中...

业务开发算法50讲

3、双端队列:并行计算中的工作窃取算法如何实现

你好,我是微扰君。 目前我们已经学习了 vector 动态数组和 list 双向链表两种STL中的序列式容器了,今天我们继续学习另一种常见的序列式数据结构,双端队列。 在并行计算中,我们常常会用多进程处理一些复杂的计算任务。为了能够通过多进程加速计算...

业务开发算法50讲