算法设计与分析
文章平均质量分 91
以实际问题为抓手,逐步学习各种算法
haaaaaaarry
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【并查集】P3367 【模板】并查集
本文介绍了并查集数据结构的实现及其应用。并查集支持两种主要操作:find查询元素所属集合和Union合并两个集合。代码实现包括路径压缩优化和按秩合并策略,初始化时间复杂度O(N),查询和合并操作均接近O(1)。该算法适用于处理大规模数据(N≤2×10^5,M≤10^6)的集合合并与查询问题,典型应用包括判断元素连通性等。示例输入输出展示了其基本操作流程。原创 2025-08-08 09:24:52 · 405 阅读 · 0 评论 -
【动态规划】P2842 纸币问题1
本文分析了P2842纸币问题,这是一个典型的无限背包问题。题目要求用n种面额无限的纸币凑出金额w,求最少需要多少张纸币。通过动态规划解决,建立状态转移方程m[i][j]表示用前i种纸币凑j金额的最小张数,其中m[i][j] = min(m[i-1][j], m[i][j-a[i]]+1)。最终m[n][w]即为答案。代码实现时初始化边界条件,然后递推填充二维数组m,时间复杂度O(nw)。该算法能正确处理题目给出的样例和其他合法输入。原创 2025-08-06 19:41:54 · 1200 阅读 · 0 评论 -
【回溯法】n皇后问题 C/C++ (附代码)
在一个n*n的棋盘上放置彼此不受攻击的n个皇后,按照国际象棋规则,皇后可以攻击与其在同一行,同一列或者同一对角线的其他皇后,求合法摆放的方案数。原创 2025-05-21 11:00:00 · 822 阅读 · 2 评论 -
【回溯法】批处理作业调度问题 C/C++
给定n个作业的集合J = (j1,j2,j3….jn),每个作业都必须先在第一个机器执行t1时间,然后在第二个机器执行t2时间。我们的目标是找到一个作业的排列顺序,使得所有作业的总等待加执行时间之和最小。这个问题在调度理论中被称为双机流水线调度问题,是经典的组合优化问题之一。原创 2025-05-21 11:00:00 · 515 阅读 · 0 评论 -
【回溯法】0-1背包问题 C/C++(附代码)
在已经讨论过0-1背包问题和背包问题的以及解法,本文将介绍0-1背包问题的回溯法解决。原创 2025-05-19 20:34:47 · 735 阅读 · 0 评论 -
【回溯法】装载问题 C++(附代码)
共n个集装箱要装上2艘载重量分别为c1和c2的轮船,其中集装箱i的重量为wi,且∑i1nwi≤c1c2。装载问题要求确定是否有一个合理的装载方案可将这些集装箱装上这2艘轮船。如果有,找出一种装载方案。原创 2025-05-19 20:06:05 · 1321 阅读 · 0 评论 -
【贪心】最小生成树问题 Prim算法 + Kruskal算法(C++ 附代码及实例)
设G=(V,E)是一个无向连同带权图,即一个网络E中每条边(v,w)的权为c[v][w]如果G的子图G是一棵包含G1的所有顶点的树,则称G1为G的生成树生成树各边权的总和称为该生成树的在G的所有生成树中,耗费最小的生成树称为G的,Minimum Spanning Tree,简称MST。原创 2025-05-11 19:16:02 · 927 阅读 · 1 评论 -
【贪心】单源最短路问题 Dijkstra算法 C++(附代码)
给定带权有向图G=(V,E), 其中每条边的权都是非负实数。V中的一个顶点,称为源。计算从源到所有其他各顶点的最短路径长度。原创 2025-05-11 11:23:48 · 837 阅读 · 0 评论 -
【动态规划/贪心】背包问题、0-1背包问题 C++(附代码)
给定n个物品和一个背包。第i件物品的价值为vi,重量为wi,背包的容量为C,每件物品只有完全装包或完全不装包两种选择,即物品不可分割。问如何安排能使背包中物品的价值最大0-1背包问题可描述为:给定c>0, wi>0, vi>0,要求找到n元向量(x1, x2, …, xn), xi∈{0, 1},使得∑wi×xi≤c且∑vi×xi最大即。原创 2025-04-18 10:00:00 · 1262 阅读 · 1 评论 -
【贪心】哈夫曼编码 C++(附代码)
•参数解释•:队列中存储的元素类型(哈夫曼树节点指针)•:底层容器(默认用 vector 实现堆)•Compare:自定义比较规则// 关键:小顶堆•为什么是?• 在C++的优先队列中,比较函数返回true时,表示a的优先级低于b• 这个比较规则会让队列按频率从小到大排列。原创 2025-04-16 22:20:03 · 1171 阅读 · 0 评论 -
【贪心】C++ 活动安排问题
n个需要使用某个公共资源的活动ai在半开区间[si, fi)使用资源,其中si为开始时间,fi为结束时间若区间[si, fi)与区间[sj, fj)不相交,称活动i与活动j是活动安排目标:安排最大可能相容的活动集合,即安排的活动。原创 2025-04-16 20:18:52 · 640 阅读 · 0 评论 -
【动态规划+优先队列】汽车加油行驶问题 C++(附完整代码及复杂度分析)
优先队列(Priority Queue)是一种特殊的队列,其中每个元素都有优先级。与普通队列不同,优先队列中的元素不是按照先进先出的顺序出队,而是按照优先级出队。在C++中,优先队列通过实现,默认是大顶堆(最大元素优先)。我们可以通过自定义比较器来实现小顶堆(最小元素优先)。动态规划记录子问题的最优解优先队列确保总是扩展最优状态正确处理了各种行驶和加油情况对于N=100的网格,该算法也能高效运行。理解这个解决方案有助于掌握动态规划和图搜索算法的实际应用。原创 2025-04-06 22:16:08 · 1073 阅读 · 1 评论 -
【动态规划】图片压缩问题 C++
数字化图像时mxn的像素阵列,简单起见设定图像为灰度图,像素介于0~255之间,存储一个像素最多需要八位(八位二进制可以表示0~255)。若每个像素都存储8位,则总的存储空间为8mn位。假设一幅图像的部分二进制编码如下:我们称之为等长编码。可以发现,编码前置位的0并没有什么用,如果我们不存储这些0,可以极大减少存储空间,因此就出现了,即不同的像素用不同的位数来存储。随之而来的问题是在解码时如何将这些编码恢复成图片,解决这个问题的方法是用两个数组分别存储第i段中和第i段中。原创 2025-04-03 07:00:00 · 900 阅读 · 0 评论 -
最大字段和问题 C++(穷举、分治法、动态规划)
给定由n个整数(包含负整数)组成的序列a1,a2,…,an,求该序列子段和的最大值。规定当所有整数均为负值时定义其最大子段和为0。原创 2025-03-26 20:33:43 · 1409 阅读 · 0 评论 -
【动态规划】最长公共子序列问题 C++
最长公共子序列问题要求给定两个序列X、Y,找出X、Y的最长公共子序列。原创 2025-03-26 19:07:52 · 1797 阅读 · 0 评论 -
【动态规划】数字塔问题 C++
给定如图所示的数字塔,自塔顶可沿箭头方向移动到底层,问如何移动使得路径上的数字和最大?其数字和是多少?原创 2025-03-22 10:57:53 · 921 阅读 · 0 评论 -
【动态规划】矩阵连乘问题 C++(附代码实例和复杂度分析)
给定n个矩阵{A1,A2,…An},其中Ai和Ai+1是可乘的。对于这n个矩阵的连乘积,可能有不同的计算次序,如何确定计算矩阵连乘积的计算次序,使得需要的数乘次序最少。原创 2025-03-20 22:08:06 · 1754 阅读 · 0 评论 -
【分治法】最接近点对问题 C++(附代码分析及实例)
给定平面上n个点,找其中的一对点,使得在n个点组成的所有点对中,该点对间的距离最小。原创 2025-03-19 21:40:01 · 1587 阅读 · 1 评论 -
【分治法】快速排序算中的分治策略 CC++(附代码)
本文介绍了快速排序算法中使用的分治策略原创 2025-02-19 11:20:57 · 1183 阅读 · 0 评论 -
【快速幂算法】快速幂算法讲解及C语言实现(递归实现和非递归实现,附代码)
本文介绍了快速幂算法,并使用C语言分别以递归和非递归的形式实现了快速幂算法原创 2025-02-14 22:14:23 · 1278 阅读 · 0 评论 -
【分治法】线性时间选择问题
本文利用分治法解决了线性时间选择问题原创 2025-02-19 21:29:09 · 973 阅读 · 0 评论 -
【分治法】棋盘覆盖问题 C/C++(附代码和测试实例及算法分析)
本文介绍了使用分治法解决棋盘覆盖问题的方法,并分析了算法的时间复杂度,附代码和测试实例原创 2025-02-18 21:11:53 · 2191 阅读 · 0 评论 -
【分治法】循环赛日程表问题 CC++(附代码、实例)
本文介绍了使用分治策略解决循环赛日程表问题的方法,包括递归和非递归实现,附代码、实例原创 2025-02-21 19:35:18 · 1923 阅读 · 0 评论
分享