顶功的定义
书接上文,我们来汇总一下声笔飞码和五笔字型(均按单字输入)的区别:
- 声笔飞码
- 第一码使用 bpmfdtnlgkhjqxzcsrywv 21 键,第二码使用 a-z 26 键,第三、四码使用 aeiou 5 键
- 原始编码的一码需要空格上屏、二三四码可以被后续编码「顶」上屏幕
- 实际编码如
m_
没、ms
目、msa
卖、msaa
码……等等
- 五笔字型
- 第一至四码都使用 a-y 25 键
- 原始编码的一二三码需要空格上屏、四码自动上屏
- 实际编码如
g_
一、gg_
五、ggg_
玨、gggg
王……等等
虽 然两种方案都是(最多)四码全码,都有一二三级简码,但是实际编码大不相同:
- 五笔字型中,每一个字实际编码都不会是另一个字的实际编码的前缀,例如
g_
不是gg_
的前缀;在实际编码输入完成之后,输入平台就立即知道了用户打的是哪个字。 - 声笔飞码中,有些字的实际编码是另一个字的实际编码的前缀,例如
ms
是msa
的前缀;当用户输入完ms
之后,输入平台还不知道用户要打的是「目」还是「卖」,但是当用户继续输入下一个字的编码qo
的时候,输入平台却能推断出用户上一个字已经输入完成。之所以能这样做,是由于「bpmfdtnlgkhjqxzcsrywv 21 键」和「aeiou 5 键」形成了互斥关系,导致不存在msq
这样的编码。
基于这个观察,我们就可以给出「顶功输入方案」的正式定义:
定义
我们说一个方案是顶功输入方案,如果其中存在两个不同的实际编码,较短码是较长码的前缀;在连续输入中,下一个编码总是和较长码的剩余部分形成互斥关系,从而使输入平台做出正确的切分。
附注:关于选重和顶功的关系
看到这里,有人可能会疑惑:五笔中,「王」和「琵琶」的原始编码都是 gggg
,前者可以被下一个字的编码顶上屏幕,实际编码为 gggg
;后者需要选重,实际编码为 gggg2
。gggg
是 gggg2
的前缀,字母键和数字键互斥,这是不是也符合上面的定义呢?
确实,这种情况表面上是符合上面的定义,不过 2
只是一个选重键,其中不包含任何有效的编码信息;并且,这种选重并不是作为五笔字型的主要输入方式出现的。所以,实际上顶功是要求这个较长码的剩余部分携带编码信息。
从这个角度来看,顶功也可以认为是一种「有规律的」选重。
更好地描述顶功方案
读者可能会觉得上面关于声笔飞码的描述过于冗赘。是的,我们现在就要引入一个更好的工具来描述顶功方案:集合论和正则表达式。
假设 26 个拉丁字母构成的结合用 表示;「bpmfdtnlgkhjqxzcsrywv 21 个键」用 表示,称为大集合;「aeiou 5 个键」用 表示,称为小集合。那么,声笔飞码的所有编码(除去一级简码之外)必然属于以下三个之一:
- AU
- AUB
- AUBB
而顶功的原理也可以简洁地表达为:这些编码的首码 A 与较长码的剩余部分中的 B 互斥。这里的每个式子称为一个「正则表达式」,而这三个式子合在一起所构成的集合(AU、AUB、AUBB)称为声笔飞码这个方案的「格式」。