在O(logn)运行时间中通过Array?

时间:2014-10-06 20:09:28

标签: java algorithm big-o pseudocode

是否可以通过布尔数组在O(logn)运行时间中找到错误值?数组的索引从0到n-1。

如果是,我们如何在java中做到这一点?伪代码很好。

3 个答案:

答案 0 :(得分:1)

没有。如果没有关于阵列的任何进一步信息,这是不可能的。

您可以做的最好的事情是O(n),它从左到右穿过数组并检查每个项目。

如果对数组进行了排序,则需要进行两次检查,两端都可以使用false值,即O(1)

矛盾的常见证据:

假设算法正确。然后,在检查少于所有元素之后,该算法产生正确的答案。现在假设算法只看到true s,它产生一个答案x。到目前为止,只更改算法检查的值,我总是可以构造一个算法失败的测试用例。因此,算法必须检查(未排序的)布尔数组的所有元素,以确定是否所有都为真。

答案 1 :(得分:1)

一般来说,答案是" NO":除非你对数组项的顺序有所了解,否则你不能通过数组搜索小于O(N)的单个值。

例如,如果数组已排序,您可以在O(log N)中找到正确的位置。

对于要排序的boolean数组,意味着在开始时包含所有false s(如果有),在结尾处包含所有true s(如果有)。如果是这种情况,您可以使用二分查找来找到"分界点"在对数时间。

答案 2 :(得分:-1)

无论您做什么,都必须检查所有值以确保没有错误值。因此线性时间平均为n / 2次检查。