我的程序里有几千个char*类型的字符串,每秒钟要对其查找两千次左右,请问如何高效处理
我的程序里有几千个char*类型的字符串,每秒钟要对其查找两千次左右,我用过TStringList排序然后查找,觉得效率较低,而且还要做一次转换。大家有什么好的方法不,谢谢。
[解决办法]
建议使用STL的voctor、list、map,把你的字符串全部存放到里面,泛型算法中查找速度非常快
[解决办法]
在數據足夠分散的情況下。幾千個字符串(按3K算),每秒钟要对其查找两千次左右。也就是每次要在0.5ms內找出結果,在最差情況下:3K*2K = 6M 即每秒鐘6百萬次字符對比運算。
先測試一下:
最差情況下,最差算法下所要的時間:
unsigned long start = GetTickCount() ;
AnsiString str1 = "abcdefghijklmn " ;
AnsiString str2 = "abcdefghijklmnopq " ;
char *p = str1.c_str() ;
for(int i = 0 ; i < 3000*2000 ; ++i)
{
if(strcmp(p, "abcdefghijklmnopq ") == 0 )
p = str1.c_str() ;
else
p = str2.c_str() ;
}
測試一下: (end - start) == 297
發覺這樣也能滿足要求了。
所以,在我的電腦上AMDX2 3600+
查找上,用遍歷來做,就能滿足3K字符串,每秒查找2K次了。(除非每個字符串都超長)
換一個std::map來做,就更快了
建立緩存,想辦法提高緩存命中率。
每秒钟要对其查找两千次左右。一般都會有大量的重復搜索,保存前十次搜索結果(或搜索率高的結果),能有效地減輕系統負擔。