• Table of Contents

前言

想象一下,你的一篇技术文章被外国开发者看到,但因为语言障碍,他们无法理解其中的精髓。或者一位国际读者想了解你的观点,却因为语言问题而放弃。在全球化的今天,多语言支持已经不再是加分项,而是必备功能。

但是,很多静态网站的多语言实现要么过于复杂,要么不够优雅。今天,我想结合我的个人博客实现,分享一种简单、直观且易于维护的方案,带你在Jekyll静态网站中优雅地实现中英双语支持。

核心实现思路

1. 文件命名规范:用文件名直接标识语言

我采用了一种非常直接且易于理解的文件命名方式:

  • 中文文章:yyyy-mm-dd-title.md
  • 英文文章:yyyy-mm-dd-title_en.md

这种命名方式的三大优点:

Read more


引言

如果你可以创建一组无需逗号或分隔符就能唯一解码的代码,这会对 DNA 测序、数据压缩和错误校正产生什么影响?

这不是纯粹的学术好奇——commafree codes 在这些领域都有实际应用。在我上一篇文章中,我们探讨了指数级复杂度的递归算法。今天,我们将深入 Knuth 的 Algorithm C,它通过巧妙的回溯和稀疏数据结构实现了惊人的效率。

本文你将学到:

  • Algorithm C 如何将复杂度从 O(2^n) 降低到可管理的水平
  • 用于剪枝搜索空间的 ingenious “poison array” 技术
  • 实用的实现技巧和性能优化方法

无论你是正在研读 TAOCP 4B,还是单纯热爱优雅算法,这篇深度解析都将改变你对组合搜索的思考方式。

Read more


引言

上一篇文章中,我们生成了参数 m=3、n=4 时的所有可能 commafree code。本文将介绍如何从这18个码中挑选出一个最大的子集,使其满足 commafree code 的性质:当集合中任意两个码相连接时,不考虑首尾各n个字母后,中间所有长度为n的子串都不在这个集合中。

由于一个码可以和自身连接,比如选择0001后,序列00010001中的所有长度为4的中间子串(0010、0100、1000)都不能出现在最终集合中。这意味着如果我们选择了某个码,它的所有循环移位都不能再加入集合。因此,对每个主码,我们只需要从它的4个循环移位中选择一个加入集合。

Read more


引言

commafree code是一种编码方式,就像Huffman编码一样,在一个由m个字母构成的长度为n的单词集合D中,如果任意的两个单词之间的任意长度为n的字串不在D中出现,那么这个D最多可以由多少个不同的单词组成就是要研究的问题。但这里我们先把问题简化,考虑n=4的情况,比如likethis就符合条件,因为iket、keth、ethi就不是单词。另外,自身循环的也不考虑,比如dodo,如果是两个dodo拼接,那么dodo一定会出现在中间的子串中。

Read more