简单算法小笔记
文章平均质量分 92
叶子_Y
我不会写文章!
展开
-
C++Dijkstra算法求最短路径
前置知识迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最短路径问题。迪杰斯特拉算法主要特点是从起始点开始,采用贪心算法的策略,每次遍历到始点距离最近且未访问过的顶点的邻接节点,直到扩展到终点为止。 —百度百科我的浅显理解对于一个图,首先源点加入一个集合(点的集合)里,然后去找和已知点集相连边权最小的点,将该点加入点集,更新源点到各点的最短距离,重复以上操作,直到扩展原创 2020-09-18 00:00:57 · 1797 阅读 · 3 评论 -
Manacher(马拉车)算法—简略讲解
这是一篇小白的算法小笔记!希望你喜欢!前言马拉车算法是用来查找一个字符串的最长回文子串的线性方法,是一个叫 Manacher 的人在 1975 年发明的,这个方法的最大贡献是在于将时间复杂度提升到了线性,这是非常了不起的!预处理这里就不赘述什么是回文串了!我相信你知道的!由于回文串的长度可以是奇数也可以是偶数!要预处理一下,统一变成奇数,方法是在每一个字符的左右都加上一个特殊字符,比如加上 ‘#’。该字符是原字符串没出现过的。例如:fevef --> #f#e#v#e#f#aba原创 2020-09-01 10:01:34 · 461 阅读 · 0 评论 -
C++ Kruskal算法求最小生成树
听了雨巨的课,来做个笔记。一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边。最小生成树可以用kruskal(克鲁斯卡尔)算法或prim(普里姆)算法求出。 ————百度百科Kruskal算法简述假设 WN=(V,{E}) 是一个含有 n 个顶点的连通网,则按照克鲁斯卡尔算法构造最小生成树的过程为:原创 2020-08-01 23:57:52 · 2230 阅读 · 0 评论 -
由一棵二叉树的中序与后序排列求出它的先序排列
题目链接:https://ac.nowcoder.com/acm/problem/14360Description给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度<=8)。Input两行,每行一个字符串,分别表示中序和后序排列Output一个字符串,表示所求先序排列Sample InputBADCBDCASample OutputABCDSolution众所周知,二叉树的三种遍历方式先序遍历:根–>左–>右中序遍历:原创 2020-07-28 00:12:36 · 7509 阅读 · 8 评论 -
KMP算法——小白讲解
温馨提示:本片文章只是我的学习笔记,看了一些相关视频和其他博主的文章,做出的总结,还有一些是我自己的一些理解,可能写得乱七八糟,还请见谅。深入的理解可能这篇文章是讲不到的,觉得不合适的同学请另寻解答,当然也欢迎您的浏览KMP算法是朴素的匹配算法BF算法的升级版。BF算法的时间复杂是O(n * m),KMP算法的时间复杂度是O(n+m)。其改进在于:每当一趟匹配过程中出现字符比较不等时,不需要回溯i指针,而是利用已经得到的“部分匹配”的结果将模式串向右“滑动”尽可能远的一段距后,继续进行比较。课本原话原创 2020-07-24 00:33:19 · 245 阅读 · 0 评论