高级数据结构

优先队列

特点:保证每次取出的元素是队列中优先级别最好的,优先级别可自定义。
常用场景:从杂乱无章的数据中按照一定的顺序(优先级)逐步的筛选出部分乃至全部的数据,例如任意一个数组,找出前K大的数。
性质:
1.数组里的第一个元素 array[0] 拥有最高的优先级别。

2. 给定一个下标 i,那么对于元素 array[i] 而言:
它的父节点所对应的元素下标是 (i-1)/2
它的左孩子所对应的元素下标是 2×i + 1
它的右孩子所对应的元素下标是 2×i + 2
3.数组里每个元素的优先级别都要高于它两个孩子的优先级别。
基本操作:向上筛选,向下筛选。
时间复杂度:O(logN)

图可以说是所有数据结构里面知识点最丰富的一个,最基本的知识点如下。

  • 阶(Order)、度:出度(Out-Degree)、入度(In-Degree)
  • 树(Tree)、森林(Forest)、环(Loop)
  • 有向图(Directed Graph)、无向图(Undirected Graph)、完全有向图、完全无向图
  • 连通图(ConnectedGraph)、连通分量(Connected Component)
  • 存储和表达方式:邻接矩阵(Adjacency
    Matrix)、邻接链表(Adjacency List)
    需要掌握的知识点:
  • 图的存储和表达方式:邻接矩阵(Adjacency Matrix)、邻接链表(Adjacency List)
  • 图的遍历:深度优先、广度优先(较为重要)
  • 二部图的检测(Bipartite)、树的检测、环的检测:有向图、无向图
  • 拓扑排序
  • 联合-查找算法(Union-Find)
  • 最短路径:Dijkstra、Bellman-Ford(区分特点,哪种场合用哪种方法)

前缀树(字典树)

性质:
1.每个节点至少包含两个基本属性。
 children:数组或者集合,罗列出每个分支当中包含的所有字符
 isEnd:布尔值,表示该节点是否为某字符串的结尾
2.前缀树的根节点是空的
所谓空,即只利用到这个节点的 children 属性,即只关心在这个字典里,有哪些打头的字符。
3. 除了根节点,其他所有节点都有可能是单词的结尾,叶子节点一定都是单词的结尾。
基本操作:创建和搜索

线段树

书写较为繁琐,需要不断练习

树状数组

特点:

  1. 它是利用数组来表示多叉树的结构,在这一点上和优先队列有些类似,只不过,优先队列是用数组来表示完全二叉树,而树状数组是多叉树。
  2. 树状数组的第一个元素是空节点。
  3. 如果节点 tree[y] 是 tree[x] 的父节点,那么需要满足条件:y = x - (x & (-x))。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值