和实际使用中的 Python 一样,伪代码的排版很讲究缩进。书写 Python 代码,通常会使用等宽字族(打字机字族),因此缩进一板一眼十分清晰;然而,在排版算法时,经常会遇到非等宽的字族和等宽字族混用的情况——此时,缩进有时候就不那么明确了。此时,给伪代码排版加上垂直的缩进提示线能够起到很好的提示作用。
初识 Docker
本文部分译自 Benjamin Cane 的博文。
Docker 是目前风靡全球的虚拟化技术。然而在两年前,Docker 还仅仅是设计者脑海中的概念而已。
本篇将介绍 Docker 的一些基本情况,以及基本操作。顺带着,我们将能见识到 Docker 一些有趣的特性。
动态规划与状态机:最大子序列和问题的扩展
xeCJK 宏包的隐藏技能:字符映射
有段时间没写 LaTeX 相关的文章了,此篇讲一讲 xeCJK
宏包中的 Mapping
功能。
由于中文空心句号是一个小圈,容易与作为下标的数字 0
或字母 o
混淆。因此,在专业数学书籍、论文排版中,最好是使用实心句点 .
来代替中文空心句号。但是,使用中文空心句号编写中文 LaTeX 手稿是大家的习惯;这样一来,使用查找替换固然是一个方案,但是繁琐且容易出错。这时候,我们就可以用到 xeCJK
宏包提供的 Mapping
选项。
Mapping
实际上是借助了 TECKit 来做字符映射。xeCJK
的作者还预先定义了能够实现简体中文和正体中文相互转换的映射表。因此,使用 xeCJK
还能实现中文的简正转换。
循环列表中的最大子序列和问题
序列的最大子序列和问题,说的是:给定一个包含若干整数(正负不限)的序列,寻找其中的一个子序列,使得该子序列元素之和在所有子序列的和中最大。
这一经典的问题,可由动态规划(中的 Kadane 算法)在 $O(n)$ 的时间内解决。
如果我们将给定的序列首尾相连,成为一个环状列表。同样的问题,就变得复杂起来。不过,在巧妙的思路下,问题仍然可以在 $O(n)$ 时间内解决。
下面我们先复习一下 Kadane 算法;然后看看怎样在线性时间内,解决循环列表中的最大子序列和问题。