对于有序列表,二进制搜索时间复杂度为O(logN)。但是在Elixir中,列表是链表,所以为了获得列表的中间元素,你必须迭代N / 2次,这使得整体搜索O(NLogN)。
所以我的问题是:
- 上述时间复杂度是否正确?
- 如果它是正确的,二元搜索在Elixir中没有意义,对吧?你必须迭代列表才能得到你想要的东西,所以最好是O(N)。
醇>
答案 0 :(得分:3)
是的,由于您说明的原因,没有理由对链接列表进行二进制搜索。您需要一个随机访问数据结构(通常是一个数组)才能使二进制搜索有用。
可能会出现一个有趣的角落案例,其中元素的比较非常昂贵,因为例如它们只是远程存储项目的句柄。在这种情况下,通过链接列表进行二进制搜索可能仍然优于线性搜索,因为虽然需要更多操作(O(N * log(N))
),但它需要较少的比较(O(log(N))
),而线性搜索需要O(N)
比较。