问题: 将N个元素使用push_back插入到vector中, 求push_back操作的复杂度。
生活随笔
收集整理的這篇文章主要介紹了
问题: 将N个元素使用push_back插入到vector中, 求push_back操作的复杂度。
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
簡單分析如下:
??? 考慮vector每次內存擴充兩倍的情況。
??? 如果我們插入N個元素, 則會引發lgN次的內存擴充,而每次擴充引起的元素拷貝次數為
????????????????????????????????????? 2^0,? 2^1, 2^2, ..., 2^lgN.
??? 把所有的拷貝次數相加得到
?? ? ? ? ? ? ? ? ?? 2^0 + 2^1 + 2^2 + ... + 2^lgN = 2 * 2^lgN - 1 約為 2N次
??? 共拷貝了N次最后一個元素, 所以總的操作大概為3N
?
??? 所以, 每個push_back操作分攤3次, 是O(1) 的復雜度。
map insert
復雜度
如果插入單個元素且無暗示,時間復雜度為?O(logn),其中?n?為容器的大小。
如果插入單個元素且有最優位置(Position)暗示,時間復雜度為?O(1),這是一個平均分攤后的常值(Amortized constant)。
如果插入多個元素,時間復雜度為?O(nlogn),“第一個”?n?為插入元素數,“第二個”?n?為插入元素數加容器大小。如果插入的范圍中的元素已經按同樣的排序規則排序,執行過程將被優化,時間復雜度甚至會降到?O(n)。
迭代器有效性
不會改變。
總結
以上是生活随笔為你收集整理的问题: 将N个元素使用push_back插入到vector中, 求push_back操作的复杂度。的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 性能优化CPU、内存、磁盘I/O、网络性
- 下一篇: 分析.cpp文件编译生成的汇编文件里语句