假设参与编码的有:
26个键字母键,用「Z」表示;
4个符号键:「,.;/」,用「F」表示;
1个空格键,用「K」表示;
那么一般四码定长形码选取的编码空间有:
一键:2(逗号,句号一键上屏)
两键:ZK=26*1(一简)
三键:ZZK=26*26*1(二简)
四键:ZZZK=26*26*26*1(三简),ZZZZ=26*26*26*26
问号、冒号、三码无后续自动上屏等略过。
----
在四码定长形码里,输入一、二、三简字时,需要按一下空格键,「当前字」才能上屏。
而顶功,则不需要按空格键,直接输入下一个字的编码,用「下一个字」把「当前字」顶上屏,这是「顶」的由来。「功」大概意指功夫、能力。
那么,在不按空格键的前提下,怎么用 「下一个字」把「当前字」顶上屏?
----
以最常见的30键(26字母+4符号)二码顶为例,把这30键分成三部分。
A=21个字母键「bcdfghjklmnpqrstvwxyz」,不含「euioa」
B=7个键,分别是5个字母键「euioa」,2个符号键「;/」
Y=2个符号键「,.」
那么二码顶选取的编码空间有:
一键:Y=2(逗号,句号一键上屏)
两键:A*(A+B+Y)=21*30
三键:A*(A+B+Y)*B=21*30*7
四键:A*(A+B+Y)*B*B=21*30*7*7
五键:A*(A+B+Y)*B*B*B=21*30*7*7*7
这样筛选空间后,不需要空格键 ,「下一个字」会自动把「当前字」顶上屏,怎么做到的呢?
----
观察知,B类键永远不会出现在第一码。
先模拟输入:
如果「当前字」是一键字,输入Y时,「当前字」 就上屏,不影响「下一个字」;
如果「当前字」是两键字,即AA/AB/AY:
--编码时,刻意没有编AAY/ABY/AYY,也没有编AAA/ABA/AYA,
--「下一个字」的第一码是Y,上屏「当前字」AA/AB/AY,上屏一键字Y
--「下一个字」的第一码是A,上屏「当前字」AA/AB/AY,保留「下一个字」的首码A,等待后续输入
如果「当前字」是三键字,即AAB/ABB/AYB:
--编码时,刻意没有编AABY/ABBY/AYBY,也没有编AABA/ABBA/AYBA,
--「下一个字」的第一码是Y,上屏「当前字」AAB/ABB/AYB,上屏一键字Y
--「下一个字」的第一码是A,上屏「当前字」AAB/ABB/AYB,保留「下一个字」的首码A,等待后续输入
……
再反过来说。
从第三码开始是关键。
从第三码开始,只要是输入B,就说明还在输人「当前字」的编码,不会有字上屏。「当前字」的编码可以是A*(A+B+Y)*B ,A*(A+B+Y)*B *B,A*(A+B+Y)*B *B*B……,这也是说「顶功是不定码长」的原因。
从第三码开始,一旦输入Y或A,说明「当前字」编码已经输完,Y或A是「下一个字」的编码。此时,「当前字」被顶上屏,并输入了「下一个字」的第一个编码
--在四码定长形码里,输入一、二、三简字时,需要按一下空格键,才能上屏 「当前字」,准备输「下一个字」
--而顶功里,不需要空格键,因为 「下一个字」的第一个编码,其实包含了空格键的功能,即上屏 「当前字」。
----
顶功的优势:
单字二码顶码长在2.2左右。
--得益于汉字单字频率分布的特性,前500字占比约80%(粗略),考虑标点的话,前500字占比约70%(粗略)
--二码顶的两键字A*(A+B+Y)=21*30,600余个,理论上可以包含前500字,实际上,比较好的二码顶,两键字占比在65%上下
顶功的劣势:
为了「顶」,一定会舍弃部分编码空间。编码空间变小,带来了很多问题。
1. 为了利用有限的两键、三键空间,一定要出简不出全。而一个字是两键、三键还是四键,大部分是按字频排,没有其他规律。就是说,初期一定要盯屏,熟练后才有希望闭眼盲打。
2. 为了利用有限的两键空间,引入了无理码/半无理码/规则简码/笔画码等。旧版声笔、西风瘦码、小兮码、灵形速影都引入了这种码,规则略有差别而已。
3. 因为空间有限,很难做大字集。日常工作、写手作家够用,专业字较多(化学生物等)定制可用,文言古字相关,不堪用。
4. 需要第三方输人法平台支持,rime, 小小,多多等。
----
上面介绍的30键三分的单字二码顶,是目前用得最普遍的框架。但单字二码顶只是顶功类输入法中的一小部分。
通用的顶功设计思路:
选定参与编码的键数,分成N个部分,这N个部分自然组成众多编码空间,为了能互顶,对这些编码空间作取舍。最后才是对字词编码,把字词填进这些空间。
键数不同,分部数不同,编码空间取舍有别,字词编码的方法不一,就有了很多种顶功类输入法。
其他顶功类输入法有:一码顶、三码顶、二四顶、双拼顶、带词组的顶,智能顶(声笔7.0,造词调频),二三整句等。
字词编码的方法不同(声形,全形等),上述顶功类都还可以细分。
如果理解了这个思路,四码定长形码也算一种简单的顶功。
----
草就,错漏难免,请指正。