集合基於底層實現不同,而造成的性能不同
- 基於鏈表的集合
- 基於二分搜索樹的集合
method | LinkedListSet | BSTSet |
---|---|---|
增add | O(n)【需要查】 | O(h)[平均] |
查contains | O(n) | O(h)[平均] |
刪remove | O(n)【均攤】 | O(h)[平均] |
h指代的是二分搜索樹的deepth
- 需要注意的是:在BST最壞的情況下【不考慮AVL】,是隻有一個分支的樹形結構,時間複雜度也爲O(n)
在滿二叉樹的情況下,h與節點n之間的關係。
N = 2^h-1
h = log_2(n+1)
O(h)=O(log_2(n))=O(log(n))
二分搜索樹最多只需要查找其深度個節點就可以查詢到相應位置。
時間複雜度分析
logn的複雜度是非常快的
Data Size | logn | n | Gap |
---|---|---|---|
n = 16 | 4 | 16 | 4倍 |
n=1024 | 10 | 1024 | 100倍 |
n=100w | 20 | 100w | 5w倍 |