优先队列 / Priority Queue
与普通队列的区别
1.保证每次取出的元素时队列中优先级最高的
2.优先级别可自定义
场景
从杂乱无序的数据中按照一定的顺序(或者优先级)筛选数据
本质
1.二叉堆的结构,堆在英文里叫Binary Heep
2.利用一个数组结构来实现完全二叉树
特性
1.数组里的第一个元素array[0]拥有最高的优先级
2.给定一个下标i,那么对于元素array[i]而言
1).父节点 对应的元素下标是(i-1)/2
2).左侧子节点 对应的元素下标是2*i + 1
3).右侧子节点 对应的元素下标是2*i + 2
3.数组中每个元素的优先级都必须要高于它两侧子节点
图 / Graph
图的基本知识
阶、度
树、森林、环
有向图、无向图、完全有向图、完全无向图
连通图、联通分量
图的存储和表达方式:邻接矩阵、邻接链表
围绕图的算法
图的遍历:深度优先、广度优先
环的检测:有向图、无向图
拓扑排序
最短路径算法:Dijkstra、Bellman-Ford、Floyd Warshall
连通性相关算法:Kosaraju、Tarjan、求解孤岛的数量、判断是否为树
图的着色、旅行商问题等
前缀树 / Trie
也称字典树
这种数据结构被广泛地运用在字典查找当中
什么是字典查找?
例如:给定一系列构成字典的字符串,要求在字典当中找出所有以"ABC"开头的字符串
方法一:暴力收索法
方法二:前缀树
前缀树重要性质
1.每个节点至少包含两个基本属性
1.)children:数组或者集合,罗列出每个分支当中包含的所有字符
2.)isEnd:布尔值,表示该节点是否为某字符串的结尾
2.根节点是空的
3.除了根节点,其他所有节点都可能是单词的结尾,叶子节点一定都是单词的结尾
线段树 / Segment Tree
什么是 线段树
一种按照二叉树的形式存储数据的结构,每个节点保存的都是数组里某一段的总和。
树状数组 / Fenwick Tree / Binary Indexed Tree
重要的基本特征
1.利用数组来表示多叉树的结构,和优先队列有些类似
2.优先队列是用数组来表示完全二叉树,而树状数组是多叉树
3.树状数组的第一个元素时空节点
4.如果节点tree[y]是tree[x]的父节点,那么需要满足y=x-(x&(-x))