我有一个要在可变长度的数据集中搜索的元素列表 . 我已经尝试过二分搜索,我发现当目标是搜索元素列表时,它并不总是有效的 .
我做了以下研究并得出结论,如果要搜索的元素数量少于数据的5%,则二分搜索是有效的,否则线性搜索更好 .
以下是详细信息
元素数量:100000
要搜索的元素数量:5000
迭代次数(二进制搜索)= log2 (N) x SearchCount=log2 (100000) x 5000=83048
搜索元素数量的进一步增加导致比线性搜索更多的迭代 .
有什么想法吗?
仅当要搜索的数字元素小于5%时,我才调用以下函数 .
private int SearchIndex(ref List entitylist, ref long[] DataList, int i, int len, ref int listcount)
{
int Start = i;
int End = len-1;
int mid;
while (Start <= End)
{
mid = (Start + End) / 2;
long target = DataList[mid];
if (target == entitylist[listcount])
{
i = mid;
listcount++;
return i;
}
else
{
if (target < entitylist[listcount])
{
Start = mid + 1;
}
if (target > entitylist[listcount])
{
End = mid - 1;
}
}
}
listcount++;
return -1; //if the element in the list is not in the dataset
}
在代码中我重新调整索引而不是值,因为我需要在调用函数中使用Index . 如果i = -1,则调用函数将值重置为前一个i,并再次使用要搜索的新元素调用该函数 .