搜索复杂度为O(log n)的算法,UNSORTED列表/数组

时间:2014-08-29 10:21:14

标签: arrays algorithm search complexity-theory

我在考试中表示:

  

找到一个可以搜索最高数字的算法   未排序的列表,并具有O(log(N))的Big-Oh复杂度。

我发现的唯一具有log n复杂性的搜索算法是二进制搜索算法,但是需要对列表/数组进行排序。

有这样的算法吗?

3 个答案:

答案 0 :(得分:10)

这是一个棘手的问题。尚未声明该列表具有 N 元素。因此,您可以使用变量更改,并将 N 替换为 2 K 。现在,使用 K 元素在列表上使用线性算法解决问题。

如果我们假设列表中有 N 个元素,可能的解决方案是使用 N 并行计算元素[ CE 0 .. CE N ]。在算法的基本情况下,我们让[ CE N / 2 .. CE CE i > N ]比较列表值 x 2i-N x 2i-N + 1 < / em>的。每个计算元素将其两个指定值中较大的一个报告给 CE i / 2 。该算法的迭代步骤是接收两个报告值的每个计算元素 CE k 报告最大值 CE k / 2 。该迭代逻辑继续,直到 CE 0 处理来自其自身的报告。它不再向自己报告,而是输出结果。

如果排除了并行计算,则无法解决问题。

答案 1 :(得分:1)

不,没有这样的算法。在未排序的列表中,找到需要浏览所有元素的最高数字。

所以,没有比O(n)好的算法!

答案 2 :(得分:1)

最好的一个是在未排序数组中的O(n)时间。

但是,不是简单地查看整个列表,而是可以应用partition()例程(来自快速排序算法),而不是在分区的下半部分递归,您可以在上半部分递归并保持分区直到最大找到元素。这需要花费O(n)时间。

查看详细说明:

http://en.wikipedia.org/wiki/Quickselect

How to find the kth largest element in an unsorted array of length n in O(n)?

希望它有所帮助! :)