广度优先搜索BFS进阶(一):多源BFS、优先队列BFS、双端队列BFS 普通队列BFS:适用于无权图;双端队列BFS:适用于边权为0或1且到每个顶点的边权都相等的带权图;优先队列BFS:适用于边权不为负且到每个顶点的边权都相等的带权图;如果图上到每个顶点的边权不等,则需使用最短路算法。
广度优先搜索BFS基础:图与迷宫 与深度优先搜索类似,我们还是以图的搜索引入广度优先搜索的定义。如下是一张无向图,现对其进行广度优先遍历:一种可能的结果是:ABFCIGEDH,与深度优先搜索不同,广搜会优先搜索该结点所有可能的分支,而深搜则是沿某一分支一直搜到底。其具体实现可以利用队列完成:这样的搜索有什么优势呢?那就是将整幅图划分出了层次,第一层:A、第二层:BF、第三层:CIGE、第四层:DH,所以广搜又可以叫做层次遍历。广搜可以用来求得图上任意两结点间的最小间距,其就等于它们分别所在的层数之差的绝对值,如B到H的最小间距为4-2=2。
基本数据结构:图 图是由结点与边构成的集合(V,E),V是所有点的集合,E是所有边的集和。图中的边是具有方向性的,只能按箭头方向从一点到另一点。我们把以这个结点为起点的有向边的数目称作该结点的出度,把以这个结点为终点的有向边的数目称作该结点的入度。图中的边无方向性,可以由任意方向从一点到另一点。我们把与该结点相连的边的数目称作该结点的度。图中的边带有权值,可以理解为从一个结点到与它相连结点的距离。............
华为od面试全流程总结 笔试是三道算法题,时间是150分钟也就是两个半小时,分值是100、100、200,如果是目标院校的话,好像150分就过了,不是的话分数线好像会高很多。我抽到的题不难,满分通过。完整的笔试题和解析见我的博客: 华为机试(6.17笔试题解析)笔试通过后会做一套性格测试题,不要忽视这个环节,这部分是有可能挂人的。(终面的时候面试官告诉我,我的性格测试结果显示我有点焦虑,还让我说明原因)技术一面是你入职后所在的项目组的面试官来面,所以会轻松一点,像我就是全程在和面试官聊天,手撕的代码题也很简单,就不详细说了。...
优先队列(堆)应用:动态维护可变序列的中位数 有如下一道题:数据流中的中位数如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。数据范围:数据流中数个数满足 1≤n≤1000 ,大小满足 1≤val≤1000 。本题的意思就是给你一个不断添加新元素的序列,动态的维护这个序列的中位数。............
动态规划入门(一):从爬楼梯开始 动态规划是运筹学的一个概念,是用来解决多阶段决策过程相关问题的一种思想,一般简称为DP(Dynamic Programming),所谓多阶段决策过程是指有一个活动的过程可以分成若干个相互联系的阶段,在它的每一阶段都需要做出决策,不同的决策将影响活动最终的结果,这个过程如下图所示,活动的初始状态为状态0,经过一次决策后转移到状态1,这是一个中间结果,经过n次决策后转移到状态n,而状态n即为活动最终的结果。与多阶段决策过程相关的问题大致有下面2种,它们是使用动态规划来解决的典型问题:最优化问题、决策方案数问题。
最短路径问题(Floyd算法、Dijkstra算法、Bellman-Ford算法、SPFA算法) 导入最短路径问题是指在一幅带权图中,找出连接两个顶点之间的所有路径中,边权和最短的那一条。如下图就是一幅带权图,边上的数字就代表该边的权值。解决最短路径问题有多种不同的算法,本文将对它们的基本思想与优化操作一一进行介绍。.........
KMP算法 导入使用朴素算法解决字符串问题时,是从主串第一次与模式串开始匹配的位置逐一验证是否能够匹配,如果不匹配,则继续向后搜寻开始匹配的位置,再次验证,依次重复直到扫描完整个主串。然而,该种匹配模式存在最坏情况,例如:主串aaaaaaab与模式串aaaaab,设主串的长度为n,模式串的长度为m,则此时的时间复杂度达到了O(nm),显然是不能处理大部分的字符串匹配问题的。为解决此问题,我们将学习一种能在线性的时间内完成对字符串的匹配的算法——KMP。KMP算法的思想思考如下问题:是否在每次字符串匹配失配的