algorithm - 30 以下的项目列表使用哪种搜索算法?

标签 algorithm search data-structures

我有一个由 30 个实数组成的排序数组。数字分布均匀。我想在这个数组中搜索一个数字。目前,我正在使用线性搜索算法。为了提高我的应用程序的性能,我需要使用更好的搜索算法。我应该使用哪种搜索算法或者我应该根据什么选择“最佳”算法?

提前致谢!

最佳答案

您没有指定语言,对于只有 30 个元素的数组,最快的方法可能会因语言而异。

但是,如果您编写测试 C# 程序,您会发现对于 RELEASE 版本,使用 BinarySearch() 会更快。 C++ 和其他语言可能会给出不同的结果。

以下测试代码使用线性和二进制搜索在 30 个整数的数组中搜索不存在的元素。因为该元素不存在,所以两次搜索都将进行最大次数的操作。成功搜索的结果会有所不同。

结果是这样的:

IndexOf()      took 00:00:00.5463193
BinarySearch() took 00:00:00.3035060

表明二分搜索速度稍快一些,至少对于 C# 而言,当目标元素不存在时。

int[] array = new int[30];
int count = 10000000;

for (int trial = 0; trial < 4; ++trial)
{
    var sw = Stopwatch.StartNew();

    for (int i = 0; i < count; ++i)
        Array.IndexOf(array, 1);

    Console.WriteLine("IndexOf() took " + sw.Elapsed);

    sw.Restart();

    for (int i = 0; i < count; ++i)
        Array.BinarySearch(array, 1);

    Console.WriteLine("BinarySearch() took " + sw.Elapsed);
}

关于algorithm - 30 以下的项目列表使用哪种搜索算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17106425/

相关文章:

php - 搜索 3 个表及其相关表的最有效方法是什么?

python - 将居中切片外的数组值清零

algorithm - 在 log n 时间内从大型排序数组中查找所有唯一元素?

java - 我的代码 "++count"和 "count++"解决方案中的 "Kth Smallest Element in a BST"有什么区别?

algorithm - 如何寻找 3 种以上交易的机会(就像运动队的做法一样)

arrays - 给定数组部分已排序部分未排序,如何找到特定元素?

javascript - algolia 搜索 - 突出显示的属性与代码段的属性

elasticsearch - Elasticsearch对包含空格的短语进行匹配

algorithm - 我该如何解决这个算法问题。最佳时间和空间复杂度是多少?

javascript - 在 2 种口味列表中进行二分搜索