我有一个要在可变长度数据集中搜索的元素列表。我尝试过二进制搜索,但发现当目标是搜索元素列表时,它并不总是有效的。
我做了以下研究并得出结论,如果要搜索的元素数量少于数据的 5%,则二进制搜索是有效的,否则线性搜索更好。
以下是详细信息
元素数量:100000
要搜索的元素数量:5000
迭代次数(二分搜索)=
log2 (N) x SearchCount=log2 (100000) x 5000=83048
搜索元素数量的进一步增加导致比线性搜索更多的迭代。
对此有什么想法吗?
仅当要搜索的数字元素小于 5% 时,我才调用以下函数。
private int SearchIndex(ref List<long> 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
}
在代码中,我重新调整索引而不是值,因为我需要在调用函数中使用索引。如果 i=-1,则调用函数将值重置为之前的 i,并再次调用该函数并使用要搜索的新元素。