【问题标题】:Can linear search be executed in a O(log n) time by incrementing the loop variable by 2 instead of 1?可以通过将循环变量增加 2 而不是 1 在 O(log n) 时间内执行线性搜索吗?
【发布时间】:2016-10-07 09:12:41
【问题描述】:

代码中的关键变化可能是这样的:

// while loop from 0 to n - 2; i initially = 0
if( arr[i + 1] != element && arr[i] != element) i += 2; 
else if(arr[i] == element){ cout << "Element present at: " << i; }  
else{ cout << "Element is present at: " << i + 1; return 0; } 

你怎么看?

【问题讨论】:

  • O(n/2) 保持在O(n) 的顺序上
  • 没有。 log(n) 是当一个 分成两半(或任何其他 const 比率 当前每个新细分问题的大小b>,即你的问题大小是16,然后变成8 -&gt; 4 -&gt; 2 -&gt; 1。如果将一个问题分成两半只进行一次,那么它就是 O(n/2) ~= O(n)。你所做的根本没有意义。如果您少执行 2 次循环,但在其中多做 2 倍的工作,您将一无所获
  • 另外,如果你的n 很奇怪,你必须在循环之后检查最后一个元素,这会使你的代码更复杂,可读性更低,那么它应该是
  • 你想要的是二进制搜索,但它只适用于排序数据

标签: algorithm search time-complexity linear-search


【解决方案1】:

答案是否定的。在最坏的情况下,您必须查看每个元素,其中有 n

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-17
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-13
    相关资源
    最近更新 更多