集合(set)
无序,不重复
1,2,3,3,2->{1,2,3}{2,3,1}{3,2,1} 无序
作用:检查某个元素是否存在,是否有重复元素
元素->哈希函数->哈希值
解决哈希冲突->链表
类型 | 时间复杂度 |
---|---|
搜索 | 无冲突:O(1) 有冲突:O(K) |
插入 | 无冲突:O(1) 有冲突:O(K) |
删除 | 无冲突:O(1) 有冲突:O(K) |
访问 | 无 |
集合常用操作:创建集合、添加元素、查询元素、删除元素、长度
力扣练习题:217 705
python集合的用法
#1.创建集合
s=set()
#2.添加元素 O(1)
s.add(10)
s.add(2)
#3.搜索元素 O(1)
2 in s
#4.删除元素 O(1)
s.remove(2)
#5.长度 O(1)
len(s)
树
存在父子关系
节点、根节点(第一个开始的节点)、叶子节点(没有孩子的节点)
普通二叉树:每个节点最多两个孩子满二叉树:除了叶子节点,每个节点都有左右两个孩子(所有叶子节点在同一层上)
完全二叉树:从树的根节点,从上到下,从左到右依次填满节点形成的二叉树。
二叉树的遍历
前序遍历:根节点->左子树->右子树中序遍历:左子树->根节点->右子树
后序遍历:左子树->右子树->根节点
练习题:力扣144 94 145
堆
必须是完全二叉树每个节点>= (最大堆)or <=(最小堆)孩子节点
最大堆:最大值->堆顶元素最小堆:最小值->堆顶元素
类型 | 时间复杂度 |
---|---|
访问 | 无 |
搜索 | O(1)(只查看堆顶元素) |
添加 | O(logN) |
删除 | O(logN) |
堆的常用操作:创建堆(最大堆,最小堆),添加元素、获取堆顶元素、删除堆顶元素、堆的长度、堆的遍历
练习题:力扣215 692
python中堆的常用操作
import heapq
class Test:
def test(self):
#1.创建最小堆
minheap=[]
heapq.heapify(minheap)
#2.添加元素
heapq.heappush(minheap,10)
heapq.heappush(minheap,8)
heapq.heappush(minheap,9)
heapq.heappush(minheap,2)
heapq.heappush(minheap,1)
heapq.heappush(minheap,11)
print(minheap)
#[1,2,9,10,8,11]
#查看堆顶元素
minheap[0]
#删除堆顶元素
heapq.heappop(minheap)
#查看堆是否有元素
len(minheap)
#遍历堆
while len(minheap)!=0:
#一直pop堆顶元素
print(heapq.heappop(minheap))
注:python无法直接创建最大堆,可以创建负的最小堆然后取相反数
图
定点、边、邻居节点、度(每个边是一个度)
无向图,有向图,权重图(一般求权重图的最短路径)
最短路径算法:贝尔曼-福特算法、Dijkstra算法、DFS、BFS