面试算法-数据结构二

大厂算法面试

1) 图论

2) 大数据

3)动态规划

优秀的算法往往取决于你采取那种数据结构

高级数据结构

1)优先队列

2)图

3)前缀树

4)线段树

5)树状数组

在分析问题的时候,回归本质,迎刃而解

优先队列

与普通队列的区别:
1)保证每次取出的元素是队列中优先级别最高的
2)优先级别可以定义

最常用的场景

从杂乱无章的数据中按一定的顺序筛选数据

本质
二叉堆结构,Binary Heap ,利用一个数组结构来实现完全二叉树

image.png
优先队列的基本操作就俩个
1)向上筛选

插入元素的时候,新元素放在树的尾部,不断向上筛选

2)向下筛选

堆顶的元素被取出时候,将堆底部的元素放入堆顶部,不断向下筛选

优先队列初始化:(最重要的时间复杂度)O(n)

image.png

解决办法:(前K个)
1)如何定义优先级
2)以前数据结构

最基本的知识点:

1)阶,度
2)树,森林,环
3)有向图,无向图,完全有向图,完全无向图
4)连通图,连通分量

图的存储和表达方式:
邻接矩阵 ,邻接链表

围绕图的算法:
图的遍历: 深度优先,广度优先
环的检测:有向图,无向图
拓扑排序
最短路算法:Dijkstra ,Bellman-Ford ,Floyd Warshall
连通性相关的算法:Kosaraju ,Tarjan ,求解孤岛的数量,判断是否为树
图的着色,旅行商问题

必须掌握
image.png

二分图:

image.png

前缀树(Trie 树)

也称为字典树

广泛运用在字典查找中

方法一:暴力搜索 O(M* N)

方法二:前缀树 O(M)

重要性质:

1)每个节点至少包含俩个基本属性

  • children :数组或集合,罗列出每个分支当中包含的所有字符
  • isEnd :布尔值,表示该节点是否为某字符串的结尾

根节点是空的

除了跟节点,其他所有节点都有可能是单词的结尾,叶子节点一定是单词的结尾

最基本的操作:

1) 创建

遍历一遍输入的字符串,对每个字符串的字符进行遍历
从前缀树的根节点开始,将每个字符加入到节点的children字符集当中
如果字符集已经包含了这个字符,跳过
如果当前字符是字符串的最后一个,把当前节点的isEnd标记为真

2)搜索
从前缀树的根节点出发,逐个匹配输入的前缀字符
如果遇到了,继续往下一层搜索
如果没遇到,立即返回

image.png

image.png

线段树

假设我们有一个数组array[0…n-1],里面有n个元素,现在我们要经常对这个数组做两件事:
1.更新数组元素的数值

2.求数组任意一段区间里元素的总和(或者平均值)

方法一:遍历一遍数组
时间复杂度:On)

方法二:线段树

O(logn)

什么是线段树
一种按照二叉树的形式存储数据的结构,每个节点保存的都是数组里某一段的总和

例如
数组是[1,3,5,7,9,11}

image.png

树状数组 Binary Index Tree

先从一个例题出发
假设我们有一个数组array[0…n-1],里面有n个元素,现在我们要经常对这个数组做两件事:

1.更新数组元素的数值

2.求数组前k个元素的总和(或者平均值)

方法一:线段树
时间复杂度:O(logn)

重要的基本特征
利用数组来表示多叉树的结构,和优先队列有些类似
优先队列是用数组来表示完全二叉树,而树状数组是多叉树
树状数组的第一个元素是空节点
如果节点treely]是tree[x的父节点,那么需要满足y=X-(仪&()

总结

1)优先队列:常见面试考点,实现过程比较繁琐。在解决面试中的问题时,实行“拿来主义”即可

2)图:被广泛运用的数据结构,如大数据问题都得运用图论,在社交网络里,每个人可以用图的顶点表示,人与人直接的关系可以用图的边表示,在3)最短路径算法
地图上,要求解从起始点到目的地,如何行驶会更快捷,需要运用图论里的
3) 前缀树:出现在面试的难题中,要求能熟练地书写它的实现以及运用

4)线段树和树状数组:应用场合比较明确
如果要求在一幅图片当中修改像素的颜色,求解任意矩形区间的灰度平均值,则需要采用二维的线段树

猜你喜欢

转载自blog.csdn.net/qq_40905284/article/details/132723792
今日推荐