Python 的 2 个进程池相关 API

作为一名算法工程师,在我的工作中经常都会写各种 Python 脚本来处理大量数据,做数据清洗、信息提取等。通常情况下,这些数据的处理并不涉及竞争条件(Race Condition),而是简单的数据并行(Data Parallel),属于 CPU 密集型任务。通常情况下,这样的任务可以被抽象为 map(fn, data) 的模式

Class Hierarchy Analysis 算法: 快速生成调用图

对于 OOP 语言来说,搭建调用图的核心问题是有多态的场景下如何确定到底是哪一个方法被调用了,下面是 Java 的一些可能的函数调用 1

Static Call Special Call Virtual Call
Instruction invokestatic invokespecial invokeinterface, invokevirtual
Receiver Objects ❌ ✅ ✅
Target Methods Static Method Constructor, Private Instance Method, Superclass Instance Method Other Instance Method
Count of Possible Target Methods 1 1 $\ge 1$ (polymorphism)
Determinancy Compile-time Compile-time Run-time

其中 Virtual Call 因为包含了多态,方法调用存在多个可能的目标方法

前缀和数组: 快速计算数组区间和

有这么一类问题——给定一个数组 $arr$ 和 $Q$ 个查询,每一个查询的格式是 $query(l, r)$,意思是计算区间和 $arr[l] + arr[l + 1] + … + arr[r]$

如果采用暴力求解,那么查询区间和的时间复杂度是 $O(N)$,处理 $Q$ 个查询就需要 $O(NQ)$,有没有什么数据结构或者是算法可以优化这个时间复杂度呢?

多头注意力是什么

在上一篇文章里面我们已经讲完了 Self Attention|自注意力,这里我们在自注意力的基础上多增加一点东西:加上多头注意力(Multi-Head Attention,MHA)。这个其实才是本来 Transformer 的自注意力的完全版本1。因为大部分内容在前文已经讲完,本篇不会太长~