[英]What's the time complexity of iterating through a std::set/std::map?
[英]Complexity of iteration through std::set
我知道迭代整個集合的時間復雜度需要O(n)
時間,其中n
是集合的大小。 問題是,兩個迭代器之間迭代的復雜性是什么, itBegin
和itEnd
? 也許它就像O(itEnd - itBegin + log n)
,但我無法證明。
復雜性將是o(n)(n的小o)而不是O(n),這意味着在最壞的情況下,你將遍歷整個集合。
迭代整個std::set
算法復雜度為O(n)。 但是時間消耗大於迭代std::vector
因為vector使用單個內存塊。
如果你想迭代2個迭代器itBegin
和itEnd
它也將是O(n1),但是n1
將類似於std::distance(itEnd, itBegin)
,在第一種情況下小於n
。 已經有迭代器就是這種情況。
如果你想在迭代之前按值找到那些位置(你在開始時沒有迭代器) - 這就變成了O(log n) + O(n2)
,實際上是O(log n)
。 比如說,如果你想從值123
迭代到結尾 - 這將是O(log n)
找到迭代器到123
和O(n2)
迭代。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.