C# 字典、集合、列表的時間復雜度


List列表是順序線性表,Add操作是O(1)或O(N),因為List是動態擴容的,在未擴容之前,其Add操作是O(1),而在擴容的時候,Add操作是O(N)的。其Contains方法,是按照線性檢索的,其復雜度是O(n)。

SortedList列表是有序線性表,Add操作是O(n), 其Contains方法是通過二分查找檢索元素的,因此復雜度是O(lg n),其Containskey方法也是通過二分查找檢索元素,復雜度也是O(lg n),ContainsValue方法是使用線性查找元素,復雜度是O(n)。

HashSet集合類是包含不重復項的無序hash表(非線性),它本身是一個一維數組,但是二維鏈表結構(擴展:一維數組的大小總是2的N次方)。Add操作是O(1)或是O(N)的,原因同List集合類。Contains方法是O(1)。

SortedSet集合類是基於紅黑樹實現的,其Add方法是O(lg n),Contains方法也是O(lg n)。

Dictionary字典類是hash表,Add操作是O(1)或是O(N)的,原理同上。其Containskey方法是O(1),原因是通過hash來查找元素而不是遍歷元素。ContainsValue方法的時間復雜度是O(N),原因是內部通過遍歷key來查找value,而不是通過hash來查找。Item[Key]屬性根據key來檢索value,其時間復雜度也是O(1)。

SortedDictionary字典類是基於平衡二叉樹實現的,其Add方法是O(lg n),ContainsKey方法也是O(lg n),而ContainsValue方法則是O(n)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM