数据结构与算法
整理接触的一些算法
Ciaran-byte
这个作者很懒,什么都没留下…
展开
-
【数据结构(c++语言版)】第三章 列表
02 第三章 列表-源码学习笔记文章目录02 第三章 列表-源码学习笔记1. 向量和列表的区别2. 选择排序和冒泡排序3. 选择排序和插入排序4. 向量和列表的插入排序区别点1. 向量和列表的区别 向量是连续储存的,列表是链式储存的。向量有寻秩访问的能力,随机查找迅速,但是插入和删除性能差。列表的寻位置访问,随机查找性能差,但是插入和删除性能高2. 选择排序和冒泡排序 冒泡排序是每轮循环,比较左右两个元素,比较大的交换到后面,所以一轮循环能够保证当前最大的元素一定排到最后面。但是冒泡排序这样就原创 2020-08-05 19:21:02 · 267 阅读 · 0 评论 -
【数据结构(c++语言版)】第二章 向量
02 第二章 向量-源码学习笔记文章目录02 第二章 向量-源码学习笔记1.构造和控制函数部分1.1 构造函数1.2 防止自身拷贝的两种方案1.2.1 创建临时空间存储1.2.2 先判断一次自身是否等于自身1.3 如果函数值不被修改,应该标记为const2. 功能函数部分2.1 去重函数2.1.1 无序向量去重函数2.1.2 有序向量去重2.2 二分查找及其改进2.2.1 二分查找版本A2.2.2 基于第一种改进思路的算法--斐波那契查找2.2.3 基于第二种改进思路的算法--二分查找版本B和C2.2.原创 2020-08-02 21:59:36 · 1058 阅读 · 0 评论 -
【数据结构(c++语言版)】第一章 绪论
01 第一章 绪论文章目录01 第一章 绪论1. 算法的复杂度表示1.1 表示记号1.2 复杂度衡量标准2. 级数的复杂度估计2.1 算术级数2.2 幂方级数2.3 等比数列级数2.4调和级数2.5 log和3. 递归分析法3.1 递归跟踪3.2 递归方程1. 算法的复杂度表示1.1 表示记号O(n) 表示最坏的情况Ω(n) 表示最好的情况Θ(n) 介于最好和坏情况之间的复杂度1.2 复杂度衡量标准按执行程序的语句数量进行计算计算复杂度的时候,常数可以忽略,低阶的复杂度可以忽略,比如原创 2020-08-02 21:36:05 · 307 阅读 · 0 评论 -
【数据结构与算法】最短路径-Floyd算法(2)
最短路径-Floyd算法(2)文章目录最短路径-Floyd算法(2)1. 算法思路与实现1.1 算法思路1.2 算法实现1.2.1 初始化1.2.2 插入点探索最短路径1.2.3 完成最短路径2. 代码实现1. 算法思路与实现1.1 算法思路 与迪杰特斯拉算法相比,弗洛伊德算法能够一次性计算出全部结点之间的最短路径,他是通过不断插入新点进行试探最短路径实现的。 我们依旧需要一个记录距离的数组和一个记录路径的数组,不过这次,我们需要的是一个二维的int Path[MaxVex][MaxVex]原创 2020-06-29 09:50:06 · 155 阅读 · 0 评论 -
【数据结构与算法】最短路径-Dijkstra算法(1)
最短路径-Dijkstra算法(1)文章目录最短路径-Dijkstra算法(1)1. 问题引入2. 算法实现思路和过程2.1 实现思路2.2 实现过程2.2.1 初始化2.2.2 标记初始结点2.2.3 选择2.2.4 更新距离2.2.5 不断迭代2.3 代码实现1. 问题引入 最小生成树解决了用最小代价连接整个图的问题,让我们学会了如何规划路径,才能以最小代价给村庄铺路。而最短路径问题就是研究任意两个点之间应该怎么走,才能走最少的路的问题。 最短路径问题有两个经典算法,分别是Dijkstra算原创 2020-06-29 09:22:13 · 623 阅读 · 0 评论 -
【数据结构与算法】最小生成树-Kruskal算法(3)
最小生成树-Kruskal算法(3) Prim算法是从顶点出发进行搜索的,构建最小生成树还有另外一种思路,就是从权值最小的边出发开始搜索,构建最小生成树。这种算就是Kruskal算法1.前置知识–并查集 因为Kruskal算法涉及到了并查集的思想,就放到前面来提前介绍一下。并查集主要是用于实现在一个图中检测是否出现环的算法。 下面我们来举个例子说明一下[2](本例源自参考资料【2】)2.前置知识–边集数组2. Kruskal算法思路参考资料【1】https://www.bilibili原创 2020-06-28 12:48:48 · 1833 阅读 · 0 评论 -
【数据结构与算法】最小生成树-Prim算法(2)
最小生成树-Prim算法(2) 前文介绍了有关图的基本知识,本文将以无向图和邻接矩阵为例,用Prim算法实现最小生成树。1. 问题引入 假设目前有v0,v1…v8一共9个村庄,村庄之间的数字表示两村之间的距离,比如10表示v0和v1两个村庄相隔10km。如果我们要为这9个村庄铺路,要求任意两个村庄都能够连通,并且铺路花费成本最低。如果你是规划的工程师,该怎么进行规划呢?这就是一种很典型的最小生成树问题。2. 什么是最小生成树 最小生成树其实包含了三个概念。最小、生成和树2.1 树 树的原创 2020-06-28 08:11:49 · 650 阅读 · 0 评论 -
【数据结构与算法】最小生成树-基础知识介绍(1)
最小生成树-基础知识1. 图结构 图是一种基本的数据结构。与线性表和树结构相比,图结构更为复杂,因为图的结点可以有数量不限的前驱结点和数量不限的后驱结点。比如下图就是图结构。 图的基本组成元素就是定点和边。2.有向图和无向图 无向图是指构成图的顶点之间的连线没有方向性 有向图是指,构成图的顶点之间的连线有方向性3.连通图 连通图是指,构成图的任意两个顶点,都是想通的。比如图2。图1中,比如A和E,是没有办法连通的,所以图1不是连通图。4.图的储存方式-邻接矩阵4.1 邻原创 2020-06-28 07:01:08 · 309 阅读 · 0 评论 -
【数据结构与算法】KMP算法
KMP算法详解文章目录KMP算法详解1. KMP算法简介2. KMP算法的前身---暴力破解法2.KMP算法的实现2.1 KMP算法的思路2.2 对模式串特征的描述2.3 next数组含义2.4 next数组的求法2.5 实现next表的创建2.6 KMP算法的实现2.7 KMP算法总结3.KMP算法的优化3.1 KMP算法的问题3.2 next数组的改进3.3 改进的KMP算法实现4. 参考资料1. KMP算法简介 KMP算法是一种用于字符串匹配的算法,从一串字符串中查询,是否包含某个子串。比如原创 2020-06-24 00:02:22 · 292 阅读 · 0 评论