【发布时间】:2014-02-06 19:23:23
【问题描述】:
我有 3 组项目(名称)。 第 1 组有大约 2,1k 个项目,第 2 组 - 大约 7,6k 和第 3 组大约 21k。 我需要在这些组中搜索。 我需要一个更好的提示。我想要么把所有东西都放在一个 bin 树中:
GTree* t = g_tree_new((GCompareFunc)g_ascii_strcasecmp);
and search like this:
goup = g_tree_lookup(t, (gpointer *)itemName);
或者制作3个字符串数组会更有效:
char g1[2300][14];
char g2[8000][14];
char g3[78000][14];
并像这样搜索(未检查,伪代码):
int isvalueinarray(char val, char *g[][14];, int size){
int i;
for (i=0; i < size; i++) {
if (memcmp(val, g[i], strlenth) == 0)
return true;
}
return false;
}
int i group=0;
if (isvalueinarray(itemName, g2, 7800) ) group = 2;
if (isvalueinarray(itemName, g1, 2300) ) group = 1;
或者有更好的解决方案吗?
【问题讨论】:
-
您要查找字符串还是子字符串?你想准确搜索什么?
-
测量,测量,测量。
-
如果组已排序,您可以使用binary search algorithm,它应该非常快。