面试官问我这个问题。如何搜索特定值的大型数组(数千或数百万个值)。
我建议二元搜索对项目进行排序并且数组大小较小的情况。如果你想要一个大数组中的最大值(值是1次传递后最右边的值),我还建议对冒泡排序算法进行1次迭代。
但我不确定哪些算法可以在固有的随机分类数组索引中提取值。
答案 0 :(得分:9)
线性搜索。这将需要O(n)
。如果阵列大小在数千和数百万的范围内,它应该足够好。
如果您更频繁地进行搜索操作。您可能希望将数组转换为哈希表。构建哈希表首先需要O(n)
,然后每个搜索操作都需要O(1)
。对于您执行的每项搜索操作,解决方案1都将O(n)
。
如果数组非常大,您可以利用多个线程同时搜索数组。将数组划分为多个部分,每个线程在其部分中搜索值。
答案 1 :(得分:2)
只是标准的线性搜索。从头开始,搜索到最后(在最坏的情况下)。
如果您不保证元素排序,则需要检查每个元素。这意味着你可以期待的最好的复杂性是O(n)。在这些条件下,无论数组的大小如何,这都是答案。