繁体   English   中英

Trie for Unicode字符集

[英]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不是。 但是AB要么都匹配前缀,要么不匹配,因为它们都代表同一个词café

  • 如果你的特里有A ,你想要匹配B怎么办? 这是同一个词,它应该匹配吗?
    →在插入trie时和匹配时,可能必须将字符串转换为相同的规范化形式

  • 还有其他问题。 在德语中,双s通常被写为ß。 ßss应该匹配吗?

它继续下去。 确定两个Unicode字符串是否相等本身就是一个非平凡的问题。 由您决定匹配的复杂程度取决于您的应用程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM