
数据结构(C语言版)
文章平均质量分 76
路由跳变
这个作者很懒,什么都没留下…
展开
-
广度优先(bfs)和深度优先搜索(dfs)的应用实例
另外,函数返回后链表ordered中保存了指向图graph中顶点的指针,因此调用者必须保证,一旦访问ordered中的元素就必须保证graph中的存储空间保持有效。这是因为初始化顶点的颜色属性以及确保起始顶点存在都需要O(V)的运行时间,广度优先搜索中的循环的复杂度是O(V+E),加载跳数统计链表的时间为O(V)。另外,hops中返回的是指向graph中实际顶点的指针,因此调用者必须保证只要访问hops,graph中的存储空间就必须保持有效。/*把白色的顶点标成灰色,并把它的邻接顶点入队*/原创 2024-01-03 10:42:53 · 1375 阅读 · 0 评论 -
图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)
从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次。(连通图与非连通图)原创 2024-01-03 10:19:49 · 1444 阅读 · 1 评论 -
基本算法——深度优先搜索(DFS)和广度优先搜索(BFS)
深度优先搜索和广度优先搜索,都是图形搜索算法,它两相似,又却不同,在应用上也被用到不同的地方。这里拿一起讨论,方便比较。原创 2024-01-03 10:03:17 · 963 阅读 · 0 评论 -
(图的遍历)深度优先搜索和广度优先搜索
它的思想是:从图中某顶点v出发,在访问了v之后依次访问v的各个未曾访问过的邻接点,然后分别从这些邻接点出发依次访问它们的邻接点,并使得“先被访问的顶点的邻接点先于后被访问的顶点的邻接点被访问,直至图中所有已被访问的顶点的邻接点都被访问到。它的思想:假设初始状态是图中所有顶点均未被访问,则从某个顶点v出发,首先访问该顶点,然后依次从它的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和v有路径相通的顶点都被访问到。在第1步访问A之后,接下来应该访问的是A的邻接点,即"C,D,F"中的一个。原创 2024-01-03 09:57:24 · 1603 阅读 · 0 评论 -
KMP入门级别算法详解--终于解决了(next数组详解)
在“aba”中,前缀就是“ab”,除去最后一个字符的剩余字符串。同理可以理解后缀。除去第一个字符的后面全部的字符串。在“aba”中,前缀是“ab”,后缀是“ba”,那么两者最长的子串就是“a”;在“ababa”中,前缀是“abab”,后缀是“baba”,二者最长重复子串是“aba”;在“abcabcdabc”中,前缀是“abcabcdab”,后缀是“bcabcdabc”,二者最长重复的子串是“abc”;这里有一点要注意,前缀必须要从头开始算,后缀要从最后一个数开始算,中间截一段相同字符串是不行的。原创 2023-12-23 22:08:40 · 240 阅读 · 0 评论 -
如何更好地理解和掌握 KMP 算法?
KMP算法是一种算法,可以在 O(n+m) 的内实现两个字符串的匹配。本文将引导您学习KMP算法,阅读大约需要30分钟。原创 2023-12-23 22:03:13 · 185 阅读 · 0 评论 -
彻底理解KMP
Knuth-Morris-Pratt 字符串查找算法,简称为 “KMP算法”,常用于在一个文本串S内查找一个模式串P 的出现位置,这个算法由Donald Knuth、Vaughan Pratt、James H. Morris三人于1977年联合发表,故取这3人的姓氏命名此算法。假设现在文本串S匹配到 i 位置,模式串P匹配到 j 位置如果j = -1,或者当前字符匹配成功(即S[i] == P[j]),都令i++,j++,继续匹配下一个字符;如果j!= -1,且当前字符匹配失败(即S[i]!原创 2023-12-23 21:50:12 · 111 阅读 · 0 评论 -
详解KMP算法
来看第一个例子:显然,当我们上边的算法得到的next数组应该是[ -1,0,0,1 ]所以下一步我们应该是把j移动到第1个元素咯:不难发现,这一步是完全没有意义的。因为后面的B已经不匹配了,那前面的B也一定是不匹配的,同样的情况其实还发生在第2个元素A上。显然,发生问题的原因在于P[j] == P[next[j]]。所以我们也只需要添加一个判断条件即可:int j = 0;int k = -1;if (p[++j] == p[++k]) { // 当两个字符相等时要跳过。原创 2023-12-23 21:17:39 · 80 阅读 · 0 评论