![](https://img-blog.csdnimg.cn/263086808f24447cbd6f1702251a47b6.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法
文章平均质量分 88
数据结构
冠long馨
这个作者很懒,什么都没留下…
展开
-
数据结构(十四)——排序算法汇总
文章目录1. 插入排序2. 希尔排序(shell sort)1. 插入排序(1)思想将待排序的记录按关键字大小插入前面已排序的序列中。注意:①只有比前一个元素[i-1]小的关键字才需要移位。②从后向前遍历排序号的序列,将大于当前关键字的元素后移,然后将关键字插入空出的位置。(2)效率时间复杂度:①最好的情况:O(n)O(n)O(n),原本有序的情况。②最坏的情况:O(n2)O(n^2)O(n2)空间复杂度:O(n)O(n)O(n)算法稳定性:稳定2. 希尔排序(shell原创 2022-06-29 16:40:46 · 397 阅读 · 0 评论 -
数据结构(十三)——KMP算法
文章目录1. 朴素模式匹配算法2. KMP算法1. 朴素模式匹配算法(1)定义:在主串中找到与模式串匹配的子串,并返回字串的位置。思想:从主串的第一位开始,逐个判断子串是否匹配模式串。①当子串所有对应位置字符都和模式串相同时,查找成功,返回子串起始位置k。②如果有一个字符不匹配,停止检查当前子串。(2)代码若当前子串查找失败,需要回溯到下一个子串开始的位置,因此可以令i=k+1i=k+1i=k+1或者i=i−j+1i=i-j+1i=i−j+1(子串起始位置以1为单位从左往右增大,此时原创 2022-05-25 15:45:49 · 360 阅读 · 1 评论 -
算法分析与设计(一)——0-1背包问题
文章目录1. 背包问题1.1 0-1背包问题在简单复习完数据结构以后,便开始了算法复习。本博客将结合复习视频与LeetCode题目,面向机考算法复习。1. 背包问题1.1 0-1背包问题(1)问题描述在背包容量有限的情况下,带走总价值最多的物品。输入:背包容量Cn个商品组成集合,每个商品有两个属性viv_ivi和pip_ipi,分别表示体积和价格。约束条件最大化价值:max∑i∈Spi\max \sum_{i \in S}p_imax∑i∈Spi背包容量限制:∑i∈Sv原创 2022-05-25 11:52:12 · 1937 阅读 · 0 评论 -
数据结构(十二)——查找
文章目录查找1. 顺序查找2. 折半查找3. 分块查找查找(1)概念平均查找长度:所有查找过程中进行关键词的比较次数的平均值ASL=∑i=1nPiCiASL=\sum_{i=1}^nP_iC_iASL=∑i=1nPiCi1. 顺序查找顺序查找可以分为一般的无序线性表查找和有序线性表查找。(1)无序线性表查找思想:从头到尾逐个比较关键字是否满足给定条件。int i;for(i=0; i<ST.length && ST[i]!=key; i++);retu原创 2022-05-15 17:33:18 · 158 阅读 · 0 评论 -
数据结构(十一)——B树
文章目录1. B树及其基本操作1.1 概念1.2 基本操作2. B+树的基本概念重点B树的基本特点B树的建立、插入和删除操作B+树的基本概念1. B树及其基本操作1.1 概念B树又称多路平衡查找树,B树中所有节点的孩子个数的最大值称为B树的阶m。(1)性质一棵m阶B树或为空树,或为满足一下特性的m叉树:对任一节点,其所有子树高度相同。根节点的子树数∈[2,m],关键字数∈[1,m-1]。其他节点的子树数∈[[m/2],m],关键字数∈[[m-2]-1,m-1]。所有非叶节点的原创 2022-05-14 22:18:54 · 2712 阅读 · 0 评论 -
数据结构(十)——拓扑排序和关键路径
文章目录1. 拓扑排序2. 逆拓扑排序3. 关键路径1. 拓扑排序(1)定义AOV网:顶点表示活动,有向边<Vi,Vj><V_i,V_j><Vi,Vj>表示活动ViV_iVi先于活动VjV_jVj进行的一种关系。①AOV网一定是有向无环图。②任何顶点不能以自己作为其前驱或后继。拓扑排序:对有向无环图顶点的一种排序。使得若存在一条从顶点A到顶点B的路径,则在排序中顶点B出现在顶点A的后面。①理解为工程事件执行的先后次序。②一个AOV网可能有多种拓原创 2022-05-10 16:25:31 · 1941 阅读 · 0 评论 -
数据结构(九)——最短路径问题
文章目录1. 单元最短路径问题1.1 BFS1.2 Dijkstra2. 每对顶点间的最短路径2.1 Floyd带权路径长度:任意一对顶点间所需要经过的边的权值和。最短路径:带权路径长度最短的一条边。最短路径问题一般可以分为两类,每一类都有经典的算法求解:单源最短路径:BFS(无权)、Dijkstra(有权+无权)。每对顶点间的最短路径:Floyd(有权+无权+负值)。1. 单元最短路径问题1.1 BFS(1)算法思路对于无权图,可以通过一次BFS遍历就可以获得指定初始顶点的单源最原创 2022-05-05 15:28:29 · 5962 阅读 · 1 评论 -
数据结构(八)——最小生成树
文章目录1. 最小生成树1.1 概念1.2 Prim算法1.3 Kruskal算法1. 最小生成树1.1 概念生成树:包含所有顶点的极小连通子图。①增加一条边,会形成一条回路。②删除一条边,会变成非连通图。最小生成树:所有边权值之和最小的生成树。一般有两种算法获得最小生成树:Prim和Kruskal,它们都是基于贪心策略的。1.2 Prim算法1.3 Kruskal算法...原创 2022-05-04 15:05:18 · 656 阅读 · 0 评论 -
数据结构(七)——图的遍历
文章目录1. 图的遍历1.2 广度优先搜索重点深度优先遍历广度优先遍历图遍历算法的应用:拓扑排序、连通性问题、关键路径。1. 图的遍历图的遍历是指从图的某一个顶点出发,按照某种搜索方法沿着图中的边对图中的所有结点访问一次且仅一次。1.2 广度优先搜索(1)核心问题搜索相邻结点判断已经访问过的结点辅助队列如何处理非连通图(2)思想广度优先搜索类似于二叉树的层次遍历算法。首先访问起始顶点,接着访问其未被访问过的邻近顶点。再从被访问的顶点出发,访问它未被访问过的邻近结点。原创 2022-04-25 11:56:01 · 1232 阅读 · 0 评论 -
数据结构(六)——图的基本概念
文章目录1. 基本概念2. 存储方式核心深度优先与广度优先图的基本概念及性质图的存储结构及其特性图的遍历1. 基本概念简单图:①不存在重复边;②不存在顶点到自身的边。多重图:多重图与简单图是相对的。完全图:①无向图:有n(n−1)/2n(n-1)/2n(n−1)/2条边的无向图称为完全图,任意两个顶点之间都存在边。②有向图:有n(n−1)n(n-1)n(n−1)条边,任意两个顶点之间都存在方向相反的两条弧。2. 存储方式...原创 2022-04-19 16:05:10 · 985 阅读 · 0 评论 -
数据结构(五)——Huffman编码树
文章目录1. 哈夫曼树和哈夫曼编码1.1 哈夫曼树的定义1.2 哈夫曼树的构造1.3 哈夫曼编码1. 哈夫曼树和哈夫曼编码1.1 哈夫曼树的定义结点的带权路径长度: 树的根到节点的路径长度与节点的权值的乘积。树的带权路径长度: 树中所有叶结点的带权路径长度之和。WPL=∑i=1nLiwiWPL = \sum_{i=1}^n L_i w_iWPL=i=1∑nLiwi哈夫曼树(最优二叉树): 含有n个带权叶节点的二叉树中,带权路径长度最小的二叉树。1.2 哈夫曼树的构造(1)步骤原创 2022-04-14 13:41:45 · 836 阅读 · 0 评论 -
数据结构(四)——二叉搜索树和平衡二叉树
文章目录1. 二叉排序树(BST)1.1 二叉排序树的定义1.2 查找1.3 插入1.4 构造1.5 删除2. 二叉平衡树(AVL)2.1 平衡二叉树的定义2.2 插入1. 二叉排序树(BST)1.1 二叉排序树的定义左子树上所有节点的值小于根节点的值。右子树上所有节点的值大于根节点的值。对二叉排序树进行中序遍历,可以获得递增的有序序列。1.2 查找(1)思想二叉排序树的查找是从根节点开始,自顶向下比较的过程。若相等,则查找成功。当根节点非空时,若小于根节点的值,则在左子树上查找。原创 2022-04-13 21:09:21 · 1373 阅读 · 0 评论 -
数据结构(三)——线索二叉树
文章目录1. 线索二叉树1.1 基本概念1.2 线索二叉树的构造1.2.1 中序线索二叉树的构造1.2.2 先序线索二叉树的构造1.2.3 后序线索二叉树的构造重点线索二叉树的构造。线索二叉树的遍历。1. 线索二叉树1.1 基本概念遍历二叉树是以一定规则将二叉树中的节点排列成一个线性序列。该序列中每个节点(第一个和最后一个除外)都有一个直接的前驱和直接后继。传统二叉链表存储仅能体现一种父子关系,不能直接得到节点在遍历中的前驱和后继。在含有n个节点的二叉树中,共有n+1个空链域。(1原创 2022-04-12 18:59:01 · 1124 阅读 · 0 评论 -
数据结构(二)——树与二叉树
文章目录1. 树的基本概念1.1 定义1.2 性质2. 二叉树2.1 几种特殊的二叉树2.2 二叉树的性质复习重点树与二叉树的性质。满二叉树、完全二叉树、二叉排序树、平衡二叉树、哈夫曼树的定义和性质。遍历操作、转换、存储结构。1. 树的基本概念问题:树和图的区别树的任何非根节点只有一个前驱节点。非空树有一个根节点。1.1 定义度:节点的子树棵树。宽度:树中节点最大的度。深度:根节点为第一层,根节点的子节点为第二层,一次类推。问题: 度为m的树和m叉树的区别?度为m的原创 2022-04-11 22:42:49 · 786 阅读 · 0 评论 -
保研机试复习(二)——栈和队列
文章目录1. 栈的应用1.1 使用数组实现栈2. 队列的应用2.1 使用数组实现队列1. 栈的应用栈是一种后进先出的数据结构。(1)常用操作empty():堆栈为空返回真。pop():移除栈顶元素。top():返回栈顶元素。push():在栈顶增加元素。size():返回栈中元素数目。#include <stack>stack<int> st;1.1 使用数组实现栈变量top表示栈顶元素的下标,当top=-1时栈为空。(1)clear清空栈内所有的元原创 2022-03-29 21:47:44 · 374 阅读 · 0 评论 -
保研机试复习(一)——算法初步
文章目录1. 排序1.1 选择排序1.2 插入排序1.3 sort排序参考资料[1] 算法笔记——胡凡、曾磊1. 排序1.1 选择排序(1)算法思路对于序列a[n]中的元素1~n:令i从1到n枚举,进行n次操作。每趟从待排序部分a[1:n]中选择最小元素,并与待排序部分第一个元素a[i]交换。a[i]与有序部分a[1:i-1]形成新的有序部分。进行n次操作,a[n]变成有序序列。时间复杂度: O(n2)O(n^2)O(n2)核心代码:找到最小元素 --> 与首个元素交换原创 2022-03-21 22:17:27 · 423 阅读 · 0 评论 -
《算法分析与设计》笔记整理
(1)全排列问题问题:打印出给定的n个字符的全排列。思想:递归,将问题转化为前缀+n-1个字符的全排列Notations:list[]:一定顺序的n个字符字符串k:当前前缀设置位置k号m:字符总数量void Perm(list[],int k,int m){ if(k ==m) { for(int i=0;i<m;i++) cout<<list[i]<<' '; cout<<endl; } for(int i=k;i<原创 2021-03-14 19:07:24 · 1539 阅读 · 0 评论 -
2020CCF暑假备考--算法篇
本博客用于暑假短期学习常见常考算法的记录文章目录1:动态规划(1)引入:斐波那契数列and数塔问题1:动态规划(1)引入:斐波那契数列and数塔问题(1)动态规划算法应用特点:①分解为相互重叠的子问题②满足最优解原理(最优子结构性质)(2)动态规划算法的设计步骤:1:确定状态(分段、选择、确定子问题)要使用动态规划算法,问题应该满足“无后效性”即若已知F(n),要求F(n+1)的值,其值仅仅与F(n)的值有关而与F(n)的选择无关。2:确定边界条件(特殊情况3:确定递推方程(因题而异,原创 2020-07-20 20:57:59 · 657 阅读 · 0 评论 -
C++ 字符串问题&题目练习
字符串问题平时的使用中也是蛮多的。所以在这里开个坑,慢慢的学习字符串的常见用法并把它们实际应用。文章目录1:字符串的常见操作与常用方法2:实践练习1:剑指offer 58 左旋转字符串1:字符串的常见操作与常用方法(1)字符串的截取、连接①字符串的截取:定义时截取 或者 substr()函数截取应用–> 2.1左旋转字符串#include <string>#字符串的截取string phrase = "abcde12345";string phr1(phrase,0,原创 2020-06-24 10:58:12 · 3017 阅读 · 0 评论 -
数据结构(初级C++)P2
本博客用于第二次初步学习数据结构,由于有了P1基础,本博客相对于P1将更注重细节与知识框架的建立文章目录原创 2020-06-22 21:03:36 · 226 阅读 · 0 评论 -
数据结构基础(1:LeetCode配套练习)
本博客用于初学数据结构的练习题目记录文章目录21:合并两个有序链表21:合并两个有序链表(1)学习方法: 递归解决(空间开销最小)1:递归解题思路: 合并两个有序链表,即将两个链表按照大小有序排列。当其中一个链表为空表时,返回另一个链表。要想连接链表节点,首先进行大小比较,如果l1->val < l2->val 还要考虑l1->next与l2的大小关系,此时...原创 2020-04-28 20:25:08 · 389 阅读 · 0 评论 -
数据结构与算法(基础 C++)P1
此博客用于记录第一次初步较浅层学习数据结构与算法的记录文章目录1 swap()算法2 SelectSort()算法1 swap()算法(1)内容: swap()算法的两种实现 swap函数(2)算法实现// 引用传参void myswap(int &x,int &y){ int p; p=x; x=y; y=p;} //注意事项:直接传递变量无法实...原创 2020-04-07 20:18:18 · 485 阅读 · 0 评论