我正在编写词典学软件,理论上可能需要使用任意(特定于词典项目的)排序规则对数万个字符串进行排序。有两种指定自定义排序规则的方法:
- 将字素映射到 unicode 样式的多级排序规则键。
- 一个按排序顺序排列的字母字素数组(可能包括二合字母等),可以在内部转换为排序规则的映射。
比较字符串的天真的方法是逐个检查字形,直到找到不匹配,然后查找不匹配字素的排序规则键进行比较,但我希望有一种更有效的方法。
到目前为止,我得到的最好的想法取决于注意到相等长度的字符串可以被视为 little-endian base-n 数字,因此我可以为每个字符串预先计算一个整数键,从而将排序规则转换为廉价的整数比较。但是,这会破坏不同长度的字符串(在对字典进行排序时很重要),并且对可以生成的整数的大小没有限制。为了考虑长度差异,我想我可以计算每个字符串的所有前缀的键列表,然后只比较长度等于被比较的较短字符串的前缀的键。这似乎做得很好,但密钥大小仍然是无限的,存储密钥可能会占用大量内存。
有没有办法改进这种方法?还是我只是完全错误地处理它,并且有一种更好的方法可以使用任意排序规则对字符串进行排序?