Delphi:高效快速的Unicode文本搜索

max*_*fax 3 delphi search text find

在Unicode文本/字符串中是否有快速有效的文本搜索?我也需要搜索一个单词的一部分,而不仅仅是一个单词.

SearchBuf?

谢谢!

Phi*_*hiS 8

正如已经指出的那样,最快的方法取决于许多事情,最重要的是你是否需要能够反复搜索.第二个问题是,真正拥有"最快"方法而不是合理快速的方法以及您愿意投入优化的时间量对您来说有多重要.

重复搜索

如果你需要重复搜索,我知道的最有效的字符串搜索方法是使用后缀数组(通常与Burrows-Wheeler变换结合使用).这种方法广泛用于生物信息学,其中人们经常需要处理大量数据集上的大量字符串搜索(例如此处).一个非常好的后缀数组(和BWT)库是libdivsufsort C库,但不幸的是我知道没有这个库的Delphi端口.(我相信这个库能够处理unicode字符串.)

单次搜索

如果您不需要重复搜索,则可以使用强力字符串搜索算法,例如,程序集优化的FastCode版本Pos和朋友.然而,这些是在Delphi unicode-ified之前编写的,我知道没有类似的优化unicode实现.如果我今天要编写一个并希望针对现代处理器(能够使用SSE4 .2指令集)进行优化,我会认真看一下PCMPESTRI汇编指令(这里参考pdf ;也请参见此处,但我有不知道该代码是否正常工作),它可以处理unicode字符串搜索所需的2字节字符.