集合基于底层实现不同,而造成的性能不同
- 基于链表的集合
- 基于二分搜索树的集合
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倍 |