二进制搜索树
搜索的时间复杂度是lg(N),总层数是lg(N)的向下取整,N是总节点数。
对数公式
a^x = N
logaN = x
排序:
counting sort and radix sort
counting sort会浪费大量空间和时间 在数字跨度比较大的时候,因为他要对所有数位开一个位置
radix sort通过将每一位数的counting sort来确定每一个数的位置
python使用的是timsort
def counting_sort(A, d):
L = []
# K = max(A) + 1 if len(A) < max(A) else len(A)
for i in range(10):
L.append([])
n = len(A)
for j in range(n):
L[A[j] // (10 ** d) % 10].append(A[j])
# 获取每一位上的数字 (10 ** d) % 10
# L = [[], [1, 1], [2, 2], [3], [], [5]]
output = []
for i in range(9):
output.extend(L[i])
return output
def Radix_sort(A):
d = len(str(max(A)))
for i in range(d):
A = counting_sort(A, i)
return A
Data structures
Mini-heap and Max-heap
链接:Heap data structures
key(a) >= key(b)
MIni-heap总是最小的值为parent,相反Max-heap总是最大值在顶端
avl tree
avl tree的插入是sub-linear的 log N