在Elixir中二元搜索有序列表O(logN)?

时间:2016-07-24 21:23:51

标签: time-complexity elixir binary-search

对于有序列表,二进制搜索时间复杂度为O(logN)。但是在Elixir中,列表是链表,所以为了获得列表的中间元素,你必须迭代N / 2次,这使得整体搜索O(NLogN)。

所以我的问题是:

  
      
  1. 上述时间复杂度是否正确?
  2.   
  3. 如果它是正确的,二元搜索在Elixir中没有意义,对吧?你必须迭代列表才能得到你想要的东西,所以最好是O(N)。
  4.   

1 个答案:

答案 0 :(得分:3)

是的,由于您说明的原因,没有理由对链接列表进行二进制搜索。您需要一个随机访问数据结构(通常是一个数组)才能使二进制搜索有用。

可能会出现一个有趣的角落案例,其中元素的比较非常昂贵,因为例如它们只是远程存储项目的句柄。在这种情况下,通过链接列表进行二进制搜索可能仍然优于线性搜索,因为虽然需要更多操作(O(N * log(N))),但它需要较少的比较(O(log(N))),而线性搜索需要O(N)比较。