关于Knuth-Liang断字算法仅用奇数位加连字符的疑问
Knuth-Liang算法奇数数字位置断字的原因
这是算法规则集的约定式设计,核心是用单个数字同时承载两个关键信息:
- 奇偶性:直接决定该位置是否允许断字
- 数值大小:代表断字优先级(多个规则匹配时取最大值,高优先级规则覆盖低优先级)
具体规则逻辑:
- 奇数数字:代表允许在此位置添加连字符断字,数字越大,该位置的断字优先级越高(比如标记为3的位置比标记为1的位置更优先被选为断字点)
- 偶数数字:代表禁止在此位置断字,无论数值多大,只要是偶数就绝对不能在这里断字
举个实际场景的例子:如果某个字符间隙同时匹配了规则x1a(允许断,优先级1)和xam3(允许断,优先级3),叠加后取最大值3(奇数),就会在此处断字;如果匹配到的最大值是4(偶数),哪怕数值更高,也不会在这里断字。
这种设计的优势在于用一个整数就搞定了“能否断字”和“优先断哪里”两个逻辑,规则存储和计算都更高效,无需额外维护布尔类型的权限标记。
内容的提问来源于stack exchange,提问作者stib
相关产品推荐
相关产品推荐

