自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++ 算法学习——1.3 Prim算法

这是一个非常容易理解,非常简单的算法。Prim算法是一种用于求解最小生成树的经典算法之一,它通过逐步选择与当前生成树相邻的具有最小权值的边来构建最小生成树。

2024-10-25 16:13:52 440

原创 Python 语言学习——应用1.3 数字图像处理(第三节,图像增强(上))

说明:img = Image.open('greypic.png').convert('L'),pixel_data = img.getdata(),pixel_data是一个包含图像像素值的元组,事实上img实际上是一个类的实例,用于表示图像。也就是0级变成1级,1级变3级,2级变5级,3、4级变为6级,5、6、7级变为7级.再更新计算频率。简单概括就是,range范围被箱子平分,每个箱子装相应像素值的像素,记录为数量。,将浮点数转换为无符号8位整数(即0-255).在NumPy中,可以使用。

2024-10-22 18:59:19 1215

原创 C++ 算法学习——1.3 A*算法

A算法是一种常用且高效的启发式搜索算法。

2024-10-19 20:09:58 881

原创 C++ 算法学习——1.9 Kruskal算法

Kruskal算法是一种用于解决最小生成树(Minimum Spanning Tree)问题的贪婪算法。

2024-10-17 15:02:44 869

原创 C++ 算法学习——1.3 Dijkstra算法

Dijkstra算法是一种用于在加权图中找到单源最短路径的经典算法。

2024-10-16 15:29:23 1331

原创 C++ 算法学习——1.3 双向广度优先搜索

【代码】C++ 算法学习——1.3 双向广度优先搜索。

2024-10-16 14:42:45 572

原创 C++ 算法学习——1.3 双向深度优先搜索

双向深度优先搜索(Bidirectional Depth-First Search)是一种图搜索算法,旨在通过从起始节点和目标节点同时开始,沿着深度优先搜索的路径向前探索,以减少搜索空间并提高搜索效率。

2024-10-15 11:57:03 478

原创 Python 语言学习——做题记录 2.3

这次主要练习集合这一数据类型。洛谷B3633集合运算2。

2024-10-14 16:53:38 250

原创 C++ 算法学习——1.7 迭代加深搜索

迭代加深搜索(Iterative Deepening Search)是一种搜索算法,优化了深度优先搜索(DFS),用于在树或图结构中找到目标节点。这种搜索算法通常用于具有较大搜索空间的问题,其中搜索树的分支非常多,而问题的答案在某个较浅的节点上。为尽量减少在无用分支上浪费的时间,可以使用迭代加深搜索。

2024-10-14 16:09:41 585

原创 C++ 算法学习——1.8 状态剪枝

在C++中,状态剪枝是一种优化技术,通常用于搜索算法(如深度优先搜索、广度优先搜索、回溯等)中,以减少搜索空间和提高算法效率。状态剪枝通过判断当前状态是否有必要继续搜索下去,从而避免对无效状态的搜索,节省时间和资源。:在搜索过程中,如果出现已经搜索过的状态(局部也行),可以避免再次搜索相同的状态,从而避免无限循环。:主要用于博弈树搜索中,通过比较已搜索到的最好结果来剪枝,避免搜索无效的分支。:根据问题的特性确定哪些状态是无效的,可以直接跳过这些状态而不进行搜索。

2024-10-14 15:20:27 457

原创 C++ 非STL数据结构学习——1.4 字典树

洛谷p1481魔族密码。

2024-10-13 11:17:10 580

原创 C++ 算法学习——1.4 字符串匹配:KMP算法

上述例子中,匹配到第四位发现不对,于是作以下操作:子串指针回到某个位置i(子串以0作索引),这个i是next数组中最后一个匹配到的字符对应的next值(此处是1)。KMP算法通过利用模式串自身的信息来避免在文本串中不必要的比较,从而提高匹配的效率。它的核心在于构建一个部分匹配表(也可叫next数组)(也称为失配函数),该表记录了模式串中每个位置对应的最长相同前缀后缀的长度。后指针继续匹配,重复上述过程直到主串指针到end或匹配成功.洛谷p4391 radio transmission。

2024-10-13 09:46:05 684

原创 C++ 算法学习——1.8 倍增与ST表

然后更新每个在n范围内的(i,j)对应的st[i][j]的值,用上述式子,具体可以比划感受一下为什么是这样的式子。在 C++ 中,"倍增"(也称为"指数增长"或"指数级别增长")是一种算法优化技术,它通常用于解决一些需要频繁查询某个区间内的信息的问题,例如在处理动态规划、搜索等算法中。倍增思想的优点在于它通过空间换时间的方式来提高查询效率,尤其在需要频繁查询某个区间内信息的情况下,可以显著减少计算量。:在查询阶段,通过利用预处理阶段的中间结果,可以快速获取到所需的信息,而不必每次都进行全面的计算。

2024-10-11 13:08:54 1227

原创 C++ 算法学习——1.8 快速幂算法

常见的位运算符包括按位与(&)、按位或(|)、按位异或(^)、取反(~)、左移()等。首先,将指数 5 转换为二进制形式:5 的二进制表示为 101。在C++中,位运算是对整数类型的位进行操作的一种运算方式。:将两个数的对应位只要有一个为1就得到1,否则为0。:将两个数的对应位都为1的情况下得到1,否则为0。:将两个数的对应位相异时得到1,相同时得到0。:对操作数的每一位取反(0变1,1变0)。:将一个数的二进制表示向左移动指定的位数。:将一个数的二进制表示向右移动指定的位数。

2024-10-11 10:43:55 850

原创 C++ 算法学习——1.8 单调队列算法

单调队列(Monotonic Queue)是一种特殊类型的队列,通常用于解决一些数组或序列相关的问题。和单调栈类似,单调队列也具有一些特定的性质,在解决一些问题时非常有用。

2024-10-10 14:46:49 630

原创 C++ 算法学习——1.8 单调栈算法

单调栈(Monotonic Stack)是一种在解决一些数组或者链表相关问题时非常有用的数据结构和算法。在C++中,单调栈通常用于解决一些需要快速找到元素左右第一个比当前元素大或小的问题。洛谷p2866bad hair days。

2024-10-10 13:21:07 690

原创 C++ 算法学习——1.8 悬线法

2.分析:显然一个极大矩形是左右上下都被障碍挡住,无法再扩大的矩形,此时障碍也包括边界。1.问题引入:对于一个矩形图,图中放置着不少障碍,要求出最大的不含障碍的矩形。其核心代码固定,使用时可以考虑直接套用。3.方法:悬线法考虑以。为高度,正上方所有点的。洛谷p4147玉蟾宫。往上能达到的最大距离。往左最大距离的最小值。往右最大距离的最小值。

2024-10-06 16:21:49 499

原创 Python 语言学习——应用1.2 数字图像处理(第二节,变换)

为什么会有这玩意:当你调整图像的大小,特别是缩小图像时,由于目标大小的像素数量少于原图像的像素数量,就需要通过插值算法来估算新像素的值。在进行旋转、平移、拉伸等几何变换时,图像的像素位置可能会发生变化(比如原x,y的像素点变成0.8x,0.9y算出来是个小数,则相应位置像素值不知道是多少)应用一些滤波器或处理器时,如模糊、锐化等操作,会导致像素值的变化,需要通过插值来重新计算像素值。如果提供了掩码图像,它将根据掩码的像素值来控制被粘贴图像的透明度,使得被粘贴图像可以部分透明地展现在目标图像上。

2024-10-05 16:49:16 1850

原创 Python 语言学习——应用1.1 数字图像处理(第一节,颜色)

所以需要三个量去接待这三个元组,每个元组储存每个像素在相应通道上的强度值,所以代表相应通道上的灰度图。这样,我们就可以对每个通道进行单独处理,比如互换绿色和蓝色通道,再合成为新的图像。说明:merge函数这次返回一个灰度类型的图像"L",r.point(函数f)函数即将r元组的各元素(强度)值通过函数f映射后组成新的元组r',返回r'.而lambda是一个简洁的函数定义方式.使用编程打开一幅真彩色图像,将绿色和蓝色通道进行互换,显示通道互换后的图像 ,并对结果进行说明.通过客观的物理量表现颜色的图像。

2024-10-05 12:50:11 2029

原创 C++ 算法学习——7.4.1 优化算法——双指针

双指针法(Two Pointers)是一种常用的算法技巧,通常用于解决数组或链表中的问题。这种技巧通过维护两个指针,通常分别指向数组或链表的不同位置,来协同解决问题。双指针法一般有两种类型:快慢指针和左右指针。

2024-10-04 16:23:33 681

原创 C++ 算法学习——1.6 差分算法与二维差分算法

一维差分数组在处理连续序列中的区间更新和查询操作时非常有用。它可以帮助在常数时间复杂度内完成区间元素的增减操作,并支持常数时间复杂度的区间查询操作。:差分数组在处理数组序列的区间操作中广泛应用,比如处理频繁的区间修改、查询问题。:原始数组中位置为L的元素等于差分数组中 [L] 前所有元素的前缀和。//如果对原数组(x1,y1)到(x2,y2)的矩形区域整体加上a.,然后再根据差分数组计算更新后的原始数组。最后通过二维前缀和还原到原数组即可。洛谷p2367语文成绩。

2024-10-04 15:13:26 1065

原创 C++ 算法学习——1.6 前缀和与二维前缀和算法

(从数组的第一个元素开始累加到当前元素的和),可以在O(1)时间内得到任意区间的子数组和,而不需要重复计算。:二维前缀和算法常用于解决二维矩阵中的区域和问题,例如二维区域和为0的最大子矩阵和、矩形区域和等。:前缀和算法常用于解决一维数组中的区间和问题,例如最大子数组和、子数组和为0的最长子数组等。:二维前缀和算法是在二维数组或矩阵上的扩展,用于快速计算。前缀和算法通过在遍历数组时计算前缀和。洛谷p1719最大加权矩形。该位置左上方所有元素的和。

2024-10-03 16:08:25 1617

原创 C++ 算法学习——1.3 拓扑排序

拓扑排序:对有向无环图(DAG)中所有顶点的一种线性排序,使得图中任意一条有向边的指向顶点在排序中都排在起始顶点之前。换句话说,如果图中存在一条从顶点A到顶点B的有向边,那么在拓扑排序中,顶点A会排在顶点B的前面。一般使用DFS或BFS来实现.洛谷p4017最大食物链计数。

2024-10-03 14:55:16 429

原创 C++ 非STL数据结构学习——1.4 图

一般而言,图的实现有邻接矩阵和邻接表两种。洛谷p3916图的遍历。

2024-10-02 16:53:38 435

原创 C++ STL数据结构学习——1.3 哈希表

作为C++ STL中的哈希集合容器,用于存储不重复元素的集合。它提供了快速的查找、插入和删除操作,平均时间复杂度为常数。这个函数返回一个迭代器,指向包含指定键的元素,一般当判断用,不直接用返回值,如果键不存在,则返回指向。C++中,哈希表的思想由STL中的unordered_map和unordered_set封装好。关于find函数,std::unordered_map。函数返回指向该元素的迭代器;中查找键为2的元素。如果找到了键为2的元素,则。函数用于查找特定的键是否存在于。,表示未找到该元素。

2024-10-02 14:29:29 454

原创 C++ 非STL数据结构学习——1.2 并查集

这里说明一下find(x),此处进行了叫“路径压缩”的优化。如果不优化,则A的祖宗是B,但B不是最终祖宗(当parent[x]==x时,证明x为最终祖宗,无法往上再找了),B的祖宗是C。这样找A的最终祖宗会遍历不少结点,浪费时间。路径压缩后,A的祖宗直接修改为C,并返回C,更快捷。每个元素有自己的祖宗信息,如果两元素根据现有祖宗信息,向上寻找到的最终祖宗一样,就认为俩元素就是一个集合。例如,A的祖宗是B,B的祖宗又是C,D的祖宗若是C,则认为A和C就是一个集合的。四海之内的人,通过祖宗放在关联在一起。

2024-10-01 15:14:29 289

原创 C++ 非STL数据结构学习——1.1 二叉树与二叉搜索树

int key;Node* left;

2024-10-01 14:29:31 453

原创 C++ 算法学习——1.3 广度优先搜索

以洛谷p1443马的遍历为例。简单讲就是一层一层地搜。

2024-09-29 17:07:10 368

原创 Python 语言学习——做题记录2.2

这次主要练习列表相关函数的使用.洛谷p1427小鱼的数字游戏。

2024-09-28 15:07:53 191

原创 C++ 算法学习——1.3 深度优先搜索

简单讲就是搜到某条路尽头,再掉头回溯搜其他的路。此中重点是尽头的判断,和对走过的路进行标记。洛谷P1219八皇后为例。

2024-09-28 13:32:03 782

原创 C++ 算法学习——1.3 二分查找与二分答案

可以采用二分答案的方式找到这个数,也就是搜索到一个值a满足得到木材数大于M时,继续向上搜索答案,若都不满足,则a就是所求,这里采用递归写二分(区间有包含关系),所以注意递归的格式,要有终止条件。即猜答案的区间,然后二分选择答案,看能否满足题意。针对有序序列,相似于单调函数零点的寻找。以洛谷P1873砍树为例。

2024-09-28 11:15:59 285

原创 Python 语言学习——做题记录2.1

洛谷B2113输出亲朋字符串。洛谷P1428小鱼比可爱。首先练习序列的操作。

2024-09-27 18:03:11 201

原创 C++ 算法学习——1.6 贪心算法

分别设为l1,r1,l2,r2代表相应左右手的数。,而大臣2在大臣1前面,则必然可以有大臣1在大臣2前面时最大值更小。贪心算法依然是分析局部,不同于分治所研究的小问题,这些局部问题与整体问题并不是同结构的。意味着,如果按照l*r作为标准,大臣呈非减序列排列,就可以出现最大值最小的情况。如果局部最优解能带来整体最优解,那贪心算法就是可用于解决问题的。于是这样的局部最优解推出全局最优解的情况,可以采用贪心算法。否则,一定存在相邻的两个大臣l1,r1,l2,r2,其中。3.如果是,则使用贪心算法。

2024-09-27 15:12:49 491

原创 Python 语言学习——做题记录1.1

这次主要练习运算符和程序结构。

2024-09-26 22:04:25 153

原创 C++ 算法学习——1.6 递推递归

而用递归的方式分析,当(i,j)不通即x(i,j)==0时,return 0;当(i,j)可以走时,f(i,j)将返回f(i+1,j)+f(i,j+1),递归的终点是i==n,j==m,return 1;分析子问题,从终点开始,附近点作为起点的条数是易知的,这是“下者”,对应某个上者,它的条数就是对应下者(右或下)的条数相加,即p[i,j]=p[i+1,j]+p[i,j+1]特别注意递归要注意return具体数值而非函数时的条件,此题中就是x(i,j)==0或i==n&&j==m.

2024-09-26 19:26:50 385

原创 C++ 算法学习—— 1.2 排序算法第一部分(sort的使用,string用于大数比较,vector的构建示例)

采用高精度算法中的思想,使用string类型处理高精度数字。基本的排序算法,如冒泡,插入,选择不再赘述。题目还说明票数会存在非常大的情况,于是。

2024-09-26 18:02:59 437

原创 C++ 算法学习——7.3 高精度算法(string类的注意)

对处理部分:可以采用string相关的函数,或对每一位字符处理精细处理。对输出部分:输出位string 类型;对输入部分:可以采取string类型记录数据,或字符数组。可以分为输入,处理,输出三个方面的研究。一般数据类型承载不了的体量。高精度算法,旨在处理。

2024-09-25 18:10:22 344

原创 C++ 算法学习——1.6 模拟的算法(memset)

模拟算法,即仿照问题进行的过程,具体地展现问题情境。要点在于全面完备地设计。可以考虑的思路是:先完成在正常简单情境下的过程,再考虑边界或极端情形。P1.以洛谷P2670扫雷游戏为例。想法是,直接检查每个格子周围的地雷数,然后修改相应位置。这是朴素的简单的思维。但考虑边界问题,数组边界上的格子在检测时会越界,同时不同边界检查位置不同,很麻烦。所以考虑将棋盘周围都放置一个无地雷格。这样每种格子的操作都一样。#include<iostream>#include&lt

2024-09-25 16:58:12 245

原创 C++我的算法学习大纲

1.掌握基本的数据结构,了解原理,会使用stl。

2024-09-25 16:09:40 124

空空如也

空空如也

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

TA关注的人

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