【问题标题】:What is the time complexity for binary_search function for a list type列表类型的 binary_search 函数的时间复杂度是多少
【发布时间】:2020-04-18 09:30:04
【问题描述】:

是 O(n) 还是 O(logn)?

  list< int > myList = { 2, 6, 12, 13, 15, 18, 20};    
    cout << binary_search(myList.begin(), myList.end(), 20) ;

【问题讨论】:

  • std::lower_boundstd::binary_search? (这并不重要,因为两者是相同的,但请不要在标题中提及一个功能,在问题正文中提及另一个功能。)
  • 必然是线性的。如果针在列表的中间,它将从begin()rbegin() 中删除 n/2。

标签: c++ sorting search time-complexity lower-bound


【解决方案1】:

复杂性

执行的比较次数与第一次和最后一次之间的距离成对数(最多log2(last - first) + O(1) 比较)。但是,对于非LegacyRandomAccessIterators,迭代器增量的数量是线性的。

(c)cppreference

std::list 迭代器不是随机访问迭代器(它们是前向迭代器),因此复杂度为 O(n)

【讨论】:

  • 感谢理解逻辑
  • @ChhaviBansal 如果这回答了您的问题,请按左侧的绿色勾号将您的问题标记为已解决。
猜你喜欢
  • 1970-01-01
  • 2020-12-03
  • 2017-09-11
  • 2020-03-13
  • 1970-01-01
  • 2018-09-20
相关资源
最近更新 更多