是否在 Elixir 中对有序列表 O(logN) 进行二进制搜索?

Is binary search for an ordered list O(logN) in Elixir?

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

所以我的问题是:

  1. Is above time complexity correct?
  2. If it's correct, the binary search wouldn't make sense in Elixir, right? You have to iterate the list to get what you want, so the best is O(N).

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

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