一組內部維護爲平衡二叉樹。計算集合的大小的複雜度是O(1)。尺寸是如何計算的,它是否保存任何變量來存儲尺寸。爲什麼STL集大小複雜度是O(1),它是如何計算的?
1
A
回答
0
當你RTFS - 你可以看到是 - 成員變量計數RB-Tree中的節點,這是stl-set的基礎。
E.g.看到https://www.sgi.com/tech/stl/stl_tree.h:
size_type _M_node_count; // keeps track of size of tree
size_type size() const { return _M_node_count; }
template <class _Key, class _Value, class _KeyOfValue,
class _Compare, class _Alloc>
typename _Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>::iterator
_Rb_tree<_Key,_Value,_KeyOfValue,_Compare,_Alloc>
::_M_insert(_Base_ptr __x_, _Base_ptr __y_, const _Value& __v)
{
// ...
++_M_node_count;
return iterator(__z);
}
+3
我相信這對於所有可能的實現都是最新的。 – Puppy
3
該規範規定只是說,所有set
S(實際上,所有容器)有size()
成員函數,它一定的時間。除此之外,標準庫的特定版本的實現者可能已經完成了它,只要它是O(1)
即可。
實際上,大小可能存儲在一個成員變量中,該成員變量在插入或刪除項目時被更新; PiotrNycz的實施者已經做到了。
相關問題
- 1. 爲什麼這個算法的空間複雜度是O(1)
- 2. 計算大O的複雜度
- 3. 用大O計算時間複雜度
- 4. 複雜性(計算大O)
- 5. 計算計算複雜度(Big-O)
- 6. 什麼是程序的複雜性以及如何計算它?
- 7. sortedArrayUsingComparator的時間複雜度(大O)是什麼? iOS/OSX
- 8. 以下僞代碼的大O複雜度是什麼?
- 9. 爲什麼鏈表刪除和插入操作的複雜度爲O(1)?它不應該是O(n)
- 10. 下面的K互補算法的大O複雜度是什麼?
- 11. 這個樸素的代碼計算組合的大O複雜性是什麼?
- 12. 爲什麼堆排序的空間複雜度爲O(1)?
- 13. 計數排序O(n + k)時間複雜度是什麼k?
- 14. 用stl向量計算複雜度?
- 15. 算法的大O複雜度
- 16. 爲什麼python的list.append()方法O(1)的時間複雜度?
- 17. 爲什麼後綴樹中發生的複雜度是O(mn)?
- 18. 爲什麼我的底部複雜度不是O(n^3)
- 19. 計算這些算法的大O複雜度?
- 20. 什麼是A *時間複雜度,它是如何派生的?
- 21. 如何使這個空間複雜度爲O(1)而不是O(n)?
- 22. 算法複雜度大O,小O,大歐米茄,小歐米茄,西塔
- 23. 爲什麼我的算法O(1)額外的空間複雜度?
- 24. 算法複雜度和大O符號
- 25. 如何計算大O符號遞歸算法的複雜性?
- 26. 在計算合併排序的複雜度時,什麼是「cn」?
- 27. 對於i的複雜性是什麼:對於o = i + 1
- 28. 爲什麼C++ STL映射容器O(log(n))的複雜性?
- 29. 如何計算C++中兩個STL集的交集的大小
- 30. 如何計算複雜度
該標準從未定義應該如何完成某件事情。它定義了像'O(1)'這樣的需求,然後把如何實現這個功能的細節留給庫實現者。但保持一個變量與元素的數量似乎是一個簡單的方法來做到這一點。注意:標準並沒有說一個集合需要是一個平衡的二叉樹。它指定了一些訪問特性(可以使用平衡二叉樹實現,因此它可能是實現std :: set的一種方式)。 –