hash table 哈希表也叫散列表 查询时间复杂度 O(1)[不包括有碰撞的情况,如果有大量碰撞会退化成o(n)] 面试做题法 1、clarification 2、possible solutions -> optimal (time & space) 3、code 4、test code 二叉搜索树 插入、删除、查找 O(logn)
测试地址:
visualgo.net/zh/bst
堆和二叉堆的实现和特性 Heap:可以迅速找到一堆数据中的最大值或者最小值的数据结构 将根节点最大的堆叫做大顶堆或大根堆,根节点最小的堆叫做小顶堆或小根堆 常见的堆的二叉堆、斐波那契堆等 find O(1) delete O(logn) insert O(lonN) or O(1)
不同实现的比较:https://shimo.im/docs/Lw86vJzOGOMpWZz2/
二叉堆的特性
通过完全二叉树来实现(注意:不是二叉搜索树[不满足查找 O(1)])
二叉堆(大顶)它满足以下性质:
是一棵完全树
树种任意节点总是>=其子节点的值
实现细节
1、二叉堆一般都通过"数组"来实现
2、假设"第一个元素"在数组中的索引为0的话,则父节点和子节点的位置关系如下:
(01)索引为i的左孩子的索引是(2*i+1)
(02)索引为i的右孩子的索引是(2*i+2)
(03)索引为i的父节点的索引是floor((i-1)/2)
插入节点:
1、新元素一律先插入到堆的尾部
2、依次向上调整堆的结构(up)
删除堆顶元素:
1、将队尾元素替换到顶部(即堆顶被替换删除掉)
2、依次从根节点向下调整整个堆的结构,一直到队尾即可 (down)
注意:二叉堆是堆(优先队列 priority_queue)的一种常见的且简单的实现;但并不是最优的实现
最小的k个数 直接排序 堆排序 快排的思想
图的属性 Graph(V,E) V-vertex:点 1、度-入度和出度 2、点与点之间:连通与否 E-edfe:边 1、有向和无向(单行线) 2、权重(边长)
图的表示
邻接矩阵
邻接表
无向无权图
有向无权图
无向有权图
图的常见算法
跟树的最大区别是一定要加 visited,因为会有环
DFS
BFS
最短路径:dijkstra
需要使用优先级队列
https://www.bilibili.com/video/av25829980?from=search&seid=13391343514095937158