跳到主要内容

顶功的定义

书接上文,我们来汇总一下声笔飞码和五笔字型(均按单字输入)的区别:

  • 声笔飞码
    • 第一码使用 bpmfdtnlgkhjqxzcsrywv 21 键,第二码使用 a-z 26 键,第三、四码使用 aeiou 5 键
    • 原始编码的一码需要空格上屏、二三四码可以被后续编码「顶」上屏幕
    • 实际编码如 m_ 没、ms 目、msa 卖、msaa 码……等等
  • 五笔字型
    • 第一至四码都使用 a-y 25 键
    • 原始编码的一二三码需要空格上屏、四码自动上屏
    • 实际编码如 g_ 一、gg_ 五、ggg_ 玨、gggg 王……等等

虽然两种方案都是(最多)四码全码,都有一二三级简码,但是实际编码大不相同:

  • 五笔字型中,每一个字实际编码都不会是另一个字的实际编码的前缀,例如 g_ 不是 gg_ 的前缀;在实际编码输入完成之后,输入平台就立即知道了用户打的是哪个字。
  • 声笔飞码中,有些字的实际编码是另一个字的实际编码的前缀,例如 msmsa 的前缀;当用户输入完 ms 之后,输入平台还不知道用户要打的是「目」还是「卖」,但是当用户继续输入下一个字的编码 qo 的时候,输入平台却能推断出用户上一个字已经输入完成。之所以能这样做,是由于「bpmfdtnlgkhjqxzcsrywv 21 键」和「aeiou 5 键」形成了互斥关系,导致不存在 msq 这样的编码。

基于这个观察,我们就可以给出「顶功输入方案」的正式定义:

定义

我们说一个方案是顶功输入方案,如果其中存在两个不同的实际编码,较短码是较长码的前缀;在连续输入中,下一个编码总是和较长码的剩余部分形成互斥关系,从而使输入平台做出正确的切分。

附注:关于选重和顶功的关系

看到这里,有人可能会疑惑:五笔中,「王」和「琵琶」的原始编码都是 gggg,前者可以被下一个字的编码顶上屏幕,实际编码为 gggg;后者需要选重,实际编码为 gggg2gggggggg2 的前缀,字母键和数字键互斥,这是不是也符合上面的定义呢?

确实,这种情况表面上是符合上面的定义,不过 2 只是一个选重键,其中不包含任何有效的编码信息;并且,这种选重并不是作为五笔字型的主要输入方式出现的。所以,实际上顶功是要求这个较长码的剩余部分携带编码信息。

从这个角度来看,顶功也可以认为是一种「有规律的」选重。

更好地描述顶功方案

读者可能会觉得上面关于声笔飞码的描述过于冗赘。是的,我们现在就要引入一个更好的工具来描述顶功方案:集合论和正则表达式。

假设 26 个拉丁字母构成的结合用 UU 表示;「bpmfdtnlgkhjqxzcsrywv 21 个键」用 AA 表示,称为大集合;「aeiou 5 个键」用 BB 表示,称为小集合。那么,声笔飞码的所有编码(除去一级简码之外)必然属于以下三个之一:

  • AU
  • AUB
  • AUBB

而顶功的原理也可以简洁地表达为:这些编码的首码 A 与较长码的剩余部分中的 B 互斥。这里的每个式子称为一个「正则表达式」,而这三个式子合在一起所构成的集合(AU、AUB、AUBB)称为声笔飞码这个方案的「格式」。