您不需要通用反向整理算法。你只想找到你曾经处理过的字符串排序规则。
因此,只需创建一个全局映射(字典),在其中存储您放入主索引的每个 UTF 字符串。UTF 字符串将是字典值,而其排序规则键将是您的字典键:
allStrings[collation_key] = utf_string
以这种方式,您创建了所有已知字符串的全局排序索引。然后,只要您需要它用于调试输出,只需通过其排序规则键检索一个字符串。
给定排序规则键的字符串不能保证是唯一的,但是,正如您所提到的,与原始字符串或多或少相似的字符串在您的应用程序中运行良好。
即使您没有访问索引的所有插入,您可能仍然可以先通过字符串检索所有记录:object -> str,然后通过排序规则:object -> coll,然后加入它们:for (objects) your_dictionary[ collations[object]]=strings[object] 。
如果您仍想设计自己的算法,请注意排序字符串包含所有字符的主要元素序列,后跟一系列二级元素,然后是三级元素,依此类推。我认为您可能会专注于学习主要元素。
- 要获取 char 的主要元素,请将格式为“given_character long_constant_sequence”的字符串转换为其排序规则序列。当您更改 given_character 时,结果的前缀子序列将成为 given_character 的主要元素。
- 现在,编写一个收集所有字符的主要元素的过程。然后,存储一个地图:主要元素 -> 字符(可能还有 primary_elements -> primary_elements_size;(但在您使用的排序算法中,大小可能是恒定的 - 检查它))
- 开发一个分词器,将您的排序规则逐个拆分为元素。一旦找不到更多已知的主要元素,它可能应该停止 - 您不想在简单的解决方案中处理次要等元素。
- 在索引排序规则上使用标记器,然后在 primary_elements -> 先前构建的字符映射中查找主要元素。编写一个近似的 UTF 字符串以在调试会话期间显示。