[英]time complexity for list stl with sort in a while loop
以下代碼的時間復雜度是多少:
while(!list.empty()) {
list.sort();
a = list.front();
list.pop_front();
b = list.front();
list.pop_front();
/** do something calculations*/
}
每次調用list.sort()
都有 O(N log N) 復雜度1 。 排序列表可能會更快——但話又說回來,它也可能會更慢(對於這種情況,標准不保證任何方向)。 它通常作為合並排序來實現,它通常不會受到預先存在的順序的太大影響(如果有的話)。
在這種情況下,你調用它 O(N) 次,所以你的整體復雜度是 O(N 2 log N)。
正如評論中已經指出的那樣,只要您只刪除列表前面的項目,列表就會保持排序,因此無需在每次迭代時重新排序。
此外,我會注意到,如果您只是從一開始就刪除元素,您可能需要考慮使用std::deque
而不是std::list
。 盡管您將獲得相同的計算復雜度,但很有可能您會看到現實生活中從list
到deque
速度顯着提高。 在您的情況下,您可能無法用deque
替換list
(例如, deque
不提供與list
相同的迭代器穩定性),但在某些情況下可以做到。
N == size()
。”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.