自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 收藏
  • 关注

原创 蓝桥杯之最短路径算法

该算法是典型的单元最短路径算法,用于计算一个节点到其他所有节点的最短路径主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止实际上是为了计算从起始节点到其他所有节点的最短路径。

2025-02-16 17:46:33 809

原创 蓝桥杯之图

对于图来说,重点在于之后的最短路径算法,这边简单做一下了解即可。

2025-02-14 17:05:37 429

原创 蓝桥杯之并查集

并查集是一种树形的数据结构,主要用于解决一些元素分组问题。用于处理一些不相交集合的合并以及查询问题。并查集的思想是用一个数组表示了整片森林,树的根节点唯一标识了一个集合,我们只要找到了某个元素的树根,就能确定他在哪个集合里问题场景:合并:将若干个元素合并到一个或者多个集合(构成一棵树或多棵树),将多个集合合并(多棵树合并为一棵树),合并x,y两个元素时,不能直接合并两个元素,而是要合并两个元素所在的树根查询:查询两个元素是否在同一个集合中。

2025-02-13 21:19:27 512

原创 蓝桥杯之KMP算法

【代码】蓝桥杯之KMP算法。

2025-02-11 18:24:55 1123

原创 蓝桥杯之BF算法

找一个子串是否在另一个串中出现。

2025-02-10 21:16:50 223

原创 蓝桥杯之分支限界算法

分支限界算法类似于回溯算法,是在问题的解空间树上搜索问题的解的算法,主要体现在两点不同:1,求解的目标不同。回溯算法的求解目标是找出解空间树中满足约束条件的所有解,而分支限界的求解目标是找出满足约束条件的一个解,或者是在满足约束条件的解中找出某种意义上的最优解2,搜索解空间树的方式不同。回溯算法以深度优先搜索解空间树,而分支限界是以广度优先搜索(以最小耗费优先)分支限界法长以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。

2025-02-10 21:01:36 560

原创 蓝桥杯之贪心算法

当一个问题具有最优子结构性质时,可以使用动态规划来实现,但有时候使用贪心算法更简单,更直接而且解决问题的效率很高例如前面的动态规划算法中的硬币问题就可以使用贪心算法来求解,从算法的名字上看,贪心算法总是做出在当前看来最好的选择,也就是说贪心算法并不是从整体最优考虑,它做出的选择只是在某种意义上的局部最优选择,当然最终希望贪心算法的到的最终结果也是最优的。虽然贪心算法不能对所有问题都得到整体最优解,但是对于很多问题它都能够产生整体最优解或者趋于最优解。

2025-02-09 14:23:51 393

原创 蓝桥杯之动态规划算法

其实就是在分治算法的基础上,加上一个数组,记录子问题的最优解,防止子问题被重复求解算法的基本思想与分治算法类似,也是将待求解的问题划分为若干子问题,按划分的顺序求解子问题。前一个子问题的解为后一子问题的求解提供了有用的信息(最优子结构)。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解,一次解决各个子问题,最后求出原问题的最优解算法的经典问题:硬币选择问题有1,3,5面值的硬币,求组成某一特定值所需的最少硬币假设特定值为11。

2025-02-06 14:49:10 452

原创 分治算法的经典问题

将数组分割为一小块一小块,在一小块一小块的数组中分别存放有一个链表,以两小块为基础合并链表并不断向上回溯,类似于归并排序,中间夹杂了C语言数据结构中的合并两个链表的知识。合并两个链表的知识可以去b站上看一下鹏哥C语言里的C语言数据结构。合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5。请将所有链表合并到一个升序链表中,返回合并后的链表。给定一个链表数组,每个链表都已经按升序排列。合并数组 = [1,2,3] ,中位数 2。将它们合并到一个有序链表中得到。

2025-01-23 22:08:09 502

原创 蓝桥杯之分治算法

规模为N的原问题的解无法直接求出,进行问题规模的缩减,划分子问题(这里子问题相互独立而且和原问题的解得性质是相同的,知识问题的规模缩小了)。如果子问题的规模仍然不够小,在进行子问题的划分,如此递归的进行下去,知道子问题规模足够小,很容易求出其解为止,最后将求出的小规模的问题的解合并为一个更大规模的问题的解,自底向上逐步求出原问题的解。

2025-01-23 20:16:45 220

原创 蓝桥杯之回溯算法

回溯算法是在包含问题的所有解空间树中,按照深度优先搜索的策略,从根节点出发深度搜索解空间树,当搜索到某一节点时,要先判断该节点是否包含问题的解,如果包含就从该节点出发继续深度搜索下去,否则逐层向上回溯。在回溯算法中大致可以分为两种模板:子集树和排列树解空间:解空间就是所有解的可能取值构成的空间。

2025-01-19 14:31:12 311

原创 冒泡排序&&选择排序&&插入排序&&希尔排序(总结)

将数据两两进行比较,小的放左边,大的放右边,经过一次遍历以后,可以将此次遍历的最大值放到数组末尾,最终需要遍历size-1次。时间复杂度为O(n^2)

2024-10-07 17:29:07 177

原创 C++数据结构之布隆过滤器

BloomFilter是通过一个位数组+k个哈希函数构成的首先构建一个位数组开始存储数据首先value值通过3个哈希函数分解成了3个数接着进行位图操作(假定存储类型为char)那么value这个值就被存储在数组中如果要查询value,只需看value经过相同哈希函数,在进行位图操作后得到的下标位都是1 则存在,但是这会有一定的误判,因为其他数据在存储的时候有可能将相同的下标位置1布隆过滤器不支持删除操作,因为存储状态位有可能是其他数据的状态位,删除后导致其他元素查找判断出错。

2024-09-26 17:01:25 381

原创 C++数据结构之大数据处理之位图法

位图法,就是用一个位(0或者1)来存储数据的状态,比较适合状态简单,数据量比较大,要求内存使用率低的问题场景。位图法解决问题,首先需要知道待处理数据中的最大值,然后按照size=(maxNumber/32)+1的大小(maxNumber除以几取决于存储数据的类型,如int型就/32)来开辟一个char(取决于存放数据的类型)类型的数组,当需要在位图中查找某个元素是否存在时,首先需要计算该数字对应的数组中的比特位,然后读取值,0表示不存在,1表示存在。

2024-09-21 14:21:01 230

原创 C++数据结构之哈希表

使关键字和其存储位置满足关系:存储位置=f(关键字),这就是一种新的存储技术————散列技术散列技术是在记录的存储位置和它的关键字之间建立的对应关系f,使得每个关键字key对应一个存储位置分f(key),在查找时,根据这个确定的对应关系找到给定key的映射f(key),如果待查找集合中存在这个记录,则必定在f(key)这个位置上。优势:使用与快速查找,时间复杂度为O(n)劣势:占用空间较大。

2024-09-19 21:48:43 925 1

原创 C语言数据结构之选择排序

从根节点开始,选出左右孩子中较小(大)的那个,去跟父亲节点进行比较,如果比父亲小(大)就交换,然后再往下调,知道叶子结点就结束。堆的两个特性:结构性,用数组表示的完全二叉树;有序性,父亲节点是左子树右子树中的最大值或最小值。2,堆排序(时间复杂度为O(N*logN,以二为底))大堆要求:树中所有父亲节点都大于等于孩子节点。小堆要求:树中所有父亲节点都小于等于孩子节点。(前提是左子树右子树都是大堆或者小堆)1,直接选择排序(效率很低)1,直接选择排序(效率很低)(1)时间复杂度O(N*N)

2024-06-20 20:39:15 299

原创 C语言排序算法之插入排序

(1)直接插入排序:是一种简单的插入排序算法,其基本思想是把待排序的记录按其关键码值得大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插完为止,得到一个新的有序序列。(2)希尔排序:又称缩小增量法,其实分为两步,第一步先分组进行预排序,让数组接近有序,第二步,进行直接插入排序。

2024-05-27 20:33:21 286

原创 C语言数据结构之单链表部分OJ题

第二题:求链表中间元素。

2024-05-17 22:30:57 1034

原创 C语言数据结构之二叉树

对于深度为K,有n个节点的二叉树,当且仅当起每一个节点都与深度为K的满二叉树中编号从1——n的节点一一对应。1,满二叉树:一个二叉树,如果每一层的节点数都达到最大值,则这个二叉树就是一个满二叉树,也就是说,如果一个二叉树的层数为K,则节点总数是2^k-1.双亲结点或父节点:若一个节点含有子节点,则称这个节点为其子节点的父节点。孩子节点或子节点:一个节点含有的子树的根节称为该节点的子节点。节点的祖先:从根到该节点所经分支上的所有节点,如A为所有节点的祖先。兄弟节点:具有相同父节点的节点称为兄弟节点。

2024-05-11 21:39:26 429 1

原创 C语言数据结构之队列

只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出的特性。入队列:进行插入操作的一端称为队尾。出队列:进行删除操作的一端称为对头。

2024-05-11 21:04:29 590 1

原创 C语言数据结构之栈

栈可以分为数组栈和链式栈,如果是链式栈,如果用尾做栈顶,尾插尾删,那么在每次删除数据的时候,需要找到尾的前一个,得设计双向链表,不然删除的效率很低。如果是头插头删,用头做栈顶就可以。栈与之前写的顺序表十分类似,栈是一个后进先出的结构,进行数据的插入和删除的一端称为栈顶,另一端称为栈底,栈的插入叫进栈/压栈/入栈,栈的删除操作叫出栈。显然数组栈的结构占优。

2024-05-09 21:43:31 327

原创 C语言数据结构之双向循环链表

(此处展示的是带哨兵位的链表,在main函数中,SDListNode*plist=NULL;,plist仅仅只是用来存放头结点的地址,往后的一切操作都是在这个头结点之后去进行插入删除,并不会改变plist所存储的值,自然不用传&plist,直接plist即可。由于单链表只能单向访问,在插入删除时有时需要寻找尾结点比较麻烦,在此基础上设置了双向循环链表,头尾互相指定。

2024-05-07 19:31:14 673

原创 C语言数据结构之单链表

单链表的结构其实就是一个连续的结构体,可以把这个结构体看成一个一室一厅的房子,卧室放要存储的数据,餐厅放指向下一个房子的指针(其实就是下一个房子的地址)。链表通过访问指针去找到下一个链表,构成一个线性结构。(其中SLTNode*plist只是一个指针用来存储头结点的地址,可以认为*pphead就是头结点的地址)链表可分为带(不带)哨兵位头结点,循环与非循环链表,以下演示非循环不带哨兵位的链表。

2024-05-06 20:05:46 360 1

原创 C语言数据结构之顺序表

顺序表的结构顺序表的结构顺序表的本质是一个连续的数组用来存储数据。顺序表可分为静态顺序表(空间固定)和动态顺序表(空间可连续开辟)顺序表的接口函数接口函数的实现。

2024-05-04 14:25:19 390 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除