簡體   English   中英

排序向量上std :: lower_bound的時間復雜度

[英]Time complexity of std::lower_bound on a sorted vector

我正在從http://www.cplusplus.com/reference/algorithm/upper_bound/學習std::upper_bound ,我發現這可能在非隨機訪問迭代器上以線性時間運行。

我需要將它用於有序矢量。 現在我不知道什么是非隨機訪問迭代器以及它是否將在對數時間上運行在已排序的向量上。

任何人都可以為我清除這一點。

§23.3.6.1[vector.overview] / p1:

向量是一個支持隨機訪問迭代器的序列容器。

隨機訪問迭代器是能夠在恆定時間內計算任意元素的偏移量而不需要從一個地方迭代到另一個地方(這將導致線性復雜性)的迭代器。

std::lower_bound本身提供了二進制搜索算法的通用實現,它並不關心迭代器用於指示范圍(它只需要迭代器至少是一個前向類別)。 它使用諸如std::advance類的輔助函數來迭代地限制其二進制搜索中的范圍。 std::vector<T>::iterator一個隨機接入類別的, std::lower_bound與對數時間復雜運行具有問候的遍歷的元件,因為它可以通過在半分割的范圍內所需的步驟數恆定時間內的每一步。

§25.4.3[alg.binary.search] / p1:

本節中的所有算法都是二進制搜索的版本,並假設被搜索的序列是通過將搜索關鍵字綁定到隱含或顯式比較函數的參數而形成的表達式進行分區的。 它們處理非隨機訪問迭代器,最大限度地減少了比較次數,這對於所有類型的迭代器都是對數的。 它們特別適用於隨機訪問迭代器,因為這些算法在數據結構中執行對數步驟。 對於非隨機訪問迭代器,它們執行線性步數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM