[英]Trie for Unicode character set
我必须将输入字符串与一组前缀相匹配。 匹配应该是最好的,这样如果有abcd*
和abcde*
,那么abcdef
应匹配abcde*
。 我正在使用Trie。 问题是输入中的字符和前缀集中的字符可以是任何Unicode字符。 因此,我们在一个简单的trie中的子数组将是不可能的(由于数组大小非常大,所以不会足够高效,至少。) 使用map而不是array仍然是低效的。 我该怎么办呢?
要构造trie,可以将Unicode字符串编码为UTF-8,然后使用编码的字节序列构造trie。 或者您可以使用代码点,并在节点中使用哈希映射。 您必须对应用程序进行基准测试,以确定哪种方法最有效。
但困难的问题是如何确定两个字符串何时匹配 。
考虑一下café这个词
这可以表示为:
A = [U+0063 U+0061 U+0066 U+0065 U+0301]
(以e和组合重音结束 )
但也作为
B = [U+0063 U+0061 U+0066 U+00E9]
(以é结尾,组合形式)
所以:
字符串是否应该匹配前缀cafe (没有重音)? A以该前缀开头, B不是。 但是A和B要么都匹配前缀,要么不匹配,因为它们都代表同一个词café 。
如果你的特里有A ,你想要匹配B怎么办? 这是同一个词,它应该匹配吗?
→在插入trie时和匹配时,可能必须将字符串转换为相同的规范化形式 。
还有其他问题。 在德语中,双s通常被写为ß。 ß和ss应该匹配吗?
它继续下去。 确定两个Unicode字符串是否相等本身就是一个非平凡的问题。 由您决定匹配的复杂程度取决于您的应用程序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.