2024五一杯数学建模竞赛A题完整成品论文和代码分析:建立钢板切割的工艺路径动态规划、贪心与分层优化模型

news2024/10/5 19:12:17

2024五一杯数学建模竞赛A题:建立钢板切割的工艺路径动态规划、贪心与分层优化模型

2024五一数学建模A题完整代码和成品论文获取↓↓↓↓↓

https://www.yuque.com/u42168770/qv6z0d/gyoz9ou5upvkv6nx?singleDoc#

本文文章较长,建议先目录。经过不懈的奋战,目前我们已经完成了2024五一数学建模竞赛A题的40+页完整论文和代码,相关完整内容可见文末参考,

代码为A题全部问题的代码,论文包括摘要、问题重述、问题分析、模型假设、符号说明、模型的建立和求解(问题1模型的建立和求解、问题2模型的建立和求解、问题3模型的建立和求解、问题4模型的建立和求解)、模型的评价等等

文章较长,建议可以先看目录,部分图片如下:

摘要

本文针对钢板切割的工艺路径优化问题,从实际工程背景出发,通过分析影响切割路径的各种因素,提出了一系列具有针对性和创新性的数学模型和优化算法,有效地解决了从简单到复杂的一系列钢板切割优化问题。

针对直线切割路径优化问题,本文将其抽象为图论中的最小权重哈密尔顿回路问题,建立了以切割线段为边、切割起点和交点为节点的图模型。在此基础上,设计了一种基于动态规划的精确算法,通过预处理和状态压缩技术,将算法复杂度降低。本文的创新点在于,充分利用了切割路径的几何特征,提出了一种高效实用的动态规划算法,为后续复杂切割路径优化奠定了基础。

在复杂曲线切割优化问题中,本文提出了一种曲线离散化与逼近的方法,通过等距采样将圆弧、椭圆等曲线转化为折线段,从而将复杂切割简化为直线切割。在此基础上,本文设计了一种基于贪心构造和2-opt局部搜索的切割路径优化启发式算法。该算法首先按照贪心策略生成初始解,然后通过局部邻域搜索对解进行迭代改进。本文的一个创新点是,针对复杂切割提出了高效的离散化与局部搜索相结合的策略,在保证求解质量的同时大幅提升了计算效率。(后面的摘要略,见完整版本)

问题重述

由于篇幅有限,对2024五一杯数学建模竞赛A题的问题重述略。下面直接开始问题分析:

问题分析

2024年五一数学建模A题的分析如下

首先,从整体上看,本题目以钢板切割路径优化为背景,提出了一系列具有实际工程意义和挑战性的子问题。这些子问题涉及到切割路径的几何拓扑、切割顺序约束、嵌套零件切割以及"过桥"连接等多个方面,覆盖了切割加工过程中的关键决策和影响因素。

接下来,我们对各个子问题进行逐一分析:

问题1分析

问题1要求在给定的简单切割布局下设计最优切割路径,使得空程总长度最小。这实际上是一个经典的图论问题,即在切割线段构成的无向图中寻找最短哈密顿路径或回路。尽管问题的概念和形式比较简单,但其计算复杂度却非常高,属于NP-hard问题。为了高效地求解这一问题,我们需要根据切割布局的特点和规模,选择适当的优化建模方法和求解算法,如整数规划、动态规划、启发式搜索等 。

问题2分析

问题2在问题1的基础上,引入了更复杂的切割布局,包括锯齿型外轮廓、圆形和椭圆形内轮廓等曲线切割元素。这些曲线切割元素增加了问题的几何复杂度,使得切割路径的拓扑结构和距离度量变得更加多样化和非线性。为了建模和求解这一问题,我们需要将曲线切割元素离散化和线性化,转化为由直线段组成的近似切割布局,然后在此基础上应用问题1的建模和求解方法。同时,我们还需要针对曲线切割元素的特点,设计合适的离散化方案和逼近策略,在保证逼近精度的同时,兼顾计算效率和优化性能。

问题3分析

问题3在问题2的基础上,进一步引入了内部嵌套零件的切割要求,即要求先切割内部的小矩形零件,再切割外部的椭圆轮廓。这实际上是一个具有优先级约束的组合优化问题,需要在切割路径优化的同时,考虑不同切割对象之间的先后顺序和依赖关系。为了建模和求解这一问题,我们可以采用分层优化的思想,将问题分解为两个子问题:内部零件的切割路径优化和外部轮廓的切割路径优化。这两个子问题可以用不同的优化模型和算法来处理,如TSP模型、最短路模型等,并通过迭代和反馈机制来协调它们之间的耦合和互斥关系。

问题4分析

问题4在问题3的基础上,进一步引入了"过桥"的概念,即在相邻的小矩形零件之间设置一定宽度的连接区域,以防止切割后零件掉落。"过桥"的引入不仅增加了切割路径优化的难度,还带来了新的决策变量和约束条件,即"过桥"的数量、位置和切割时机。为了建模和求解这一问题,我们可以将其转化为一个混合整数非线性规划问题,并采用分支定界、外逼近、罚函数等方法进行求解。同时,我们还可以考虑启发式算法,如遗传算法、模拟退火算法等,通过智能搜索和优化,在合理的时间内找到近似最优解。

模型假设

本文对2024五一数模A题问题1到问题4的模型建立与求解过程中,我们使用了以下几个主要的模型假设:

  1. 切割路径的几何抽象假设:我们假设切割路径可以抽象为图论中的哈密顿路径或哈密顿回路,即每个切割点或切割线段对应图中的一个节点,相邻切割点或切割线段之间的切割路径对应图中的一条边,从而将切割路径优化问题转化为在图上寻找最短哈密顿路径或回路的问题。

  2. 切割代价的距离度量假设:在计算切割路径的代价或长度时,我们通常假设切割点或切割线段之间的距离可以用某种几何距离度量来衡量,如欧氏距离、曼哈顿距离等,从而将切割路径长度表示为各边距离的加权求和。

  3. 切割顺序的线性化假设:(略)

  4. "过桥"的几何简化假设:(略)

  5. 切割路径的连续化假设:(略,完整见文末参考)

符号说明(部分)

以下是问题1到问题4的建模和求解过程中使用的主要符号及其说明,包括决策变量、参数、集合、函数等。这些符号在不同的问题和模型中可能有所不同,但都遵循了常用的数学规范和惯例。

模型的建立与求解(部分)

问题一模型的建立

首先,让我们来分析一下问题1的特点和求解思路。问题1给出了一个相对简单的下料切割布局N1,要求设计最优切割路径方案,使得空程总长度最小。这里的关键是如何合理地安排切割线的切割顺序,以避免不必要的空程。直观地看,我们希望切割路径尽可能地连续,减少起点到各个切割线之间的来回移动。同时,由于切割起点固定为布局的右下角点,我们还希望优先切割靠近起点的切割线,延迟切割远离起点的切割线。这样可以避免切割路径的"交叉",降低空程长度。

问题一最小权重哈密尔顿回路问题建模

基于以上分析,我们可以将问题1抽象为一个图论问题。具体地,我们将切割线看作图的边,切割线的交点和端点看作图的节点,那么整个切割布局就对应着一个无向图。在该图中,我们需要找到一条经过所有边且总权重最小的哈密尔顿回路,其中边的权重定义为两个节点之间的曼哈顿距离。这样,问题1就转化为了一个经典的图论优化问题——最小权重哈密尔顿回路问题。

接下来,我们来建立问题1的数学模型。设切割布局N1对应的无向图为 𝐺=(𝑉,𝐸) ,其中 𝑉 为节点集合, 𝐸 为边集合。对于任意两个节点 𝑖,𝑗∈𝑉 ,定义它们之间的权重 𝑤(𝑖,𝑗) 为:

𝑤(𝑖,𝑗)=|𝑥𝑖−𝑥𝑗|+|𝑦𝑖−𝑦𝑗|

其中 (𝑥𝑖,𝑦𝑖) 和 (𝑥𝑗,𝑦𝑗) 分别为节点 𝑖 和 𝑗 的坐标。

设 𝜋=(𝜋1,𝜋2,⋯,𝜋|𝑉|) 为 𝐺 上的一条哈密尔顿回路,其中 𝜋𝑖∈𝑉 表示回路上第 𝑖 个访问的节点。定义 𝜋 的总权重 𝑊(𝜋) 为:

𝑊(𝜋)=∑𝑖=1|𝑉|−1𝑤(𝜋𝑖,𝜋𝑖+1)+𝑤(𝜋|𝑉|,𝜋1)

那么,问题1的数学模型可以表述为:

min𝜋𝑊(𝜋)

𝑠.𝑡.𝜋 is a Hamilton cycle of 𝐺

起点𝜋1=起点(𝑥𝑠,𝑦𝑠)

其中 (𝑥𝑠,𝑦𝑠) 为指定的切割起点坐标。

问题一动态规划算法

现在,我们来设计求解上述模型的算法。考虑到布局N1中切割线数量较少,节点数也不多,我们可以考虑使用动态规划算法求解。动态规划算法的基本思想是,将问题划分为互相关联的若干子问题,并基于子问题的最优解,递推得到原问题的最优解。在本问题中,我们可以定义状态 𝑑𝑝[𝑆][𝑖] 表示:当前已经访问过的节点集合为 𝑆 ,当前位于节点 𝑖 ,再经过未访问节点并回到起点的最小权重。那么,状态转移方程可以写作:

𝑑𝑝[𝑆][𝑖]={min𝑗∉𝑆{𝑑𝑝[𝑆∪{𝑗}][𝑗]+𝑤(𝑖,𝑗)},𝑆≠𝑉∖{𝑠}𝑤(𝑖,𝑠),𝑆=𝑉∖{𝑠}

其中 𝑠 表示起点节点。

算法的时间复杂度为 𝑂(2|𝑉|⋅|𝑉|2) ,空间复杂度为 𝑂(2|𝑉|⋅|𝑉|) 。尽管复杂度较高,但对于节点数较少的情况,动态规划算法是一个很好的选择,能够保证得到最优解。

下面,给出动态规划算法的详细步骤:

  1. 预处理计算任意两个节点之间的权重 𝑤(𝑖,𝑗) ,存储在二维数组中。

  2. 初始化 𝑑𝑝 数组。对于任意的 𝑆 和 𝑖 ,若 𝑖∉𝑆 ,则 𝑑𝑝[𝑆][𝑖]=∞ ;若 𝑖=𝑠 ,则 𝑑𝑝[∅][𝑠]=0 。

  3. 枚举节点数 𝑘=1,2,⋯,|𝑉|−1 ,进行状态转移:

  1. 计算最优值: 𝑎𝑛𝑠=min𝑖≠𝑠{𝑑𝑝[𝑉∖{𝑠}][𝑖]+𝑤(𝑖,𝑠)}

  2. 回溯得到最优路径: 𝑆=𝑉∖{𝑠},𝑖=arg⁡min𝑖≠𝑠{𝑑𝑝[𝑉∖{𝑠}][𝑖]+𝑤(𝑖,𝑠)} 𝑝𝑎𝑡ℎ=[𝑖]

while |𝑆|>1 do

​ 𝑗=arg⁡min𝑗∉𝑆{𝑑𝑝[𝑆∖{𝑖}][𝑗]+𝑤(𝑗,𝑖)}

​ 𝑝𝑎𝑡ℎ.𝑎𝑝𝑝𝑒𝑛𝑑(𝑗)

​ 𝑆=𝑆∖{𝑖},𝑖=𝑗

end while

path.append(s)

3. 输出最小空程总长度 𝑎𝑛𝑠 和最优切割路径 𝑝𝑎𝑡ℎ 。(后略,见完整版)

问题一模型的matlab求解

以下是求解问题1的MATLAB代码(部分,完整可运行代码见文末参考):

% 动态规划算法求解
% dp(S,i)表示当前已经访问过的节点集合为S,当前位于节点i,再经过未访问节点并回到起点的最小权重
dp = inf(2^n, n); 
dp(1,1) = 0; % 初始状态

for k = 1:n-1
    for S = 1:2^n-1
        if bitand(S, 1) == 0 % 保证起点不在S中
            for i = 1:n
                if bitand(S, 2^(i-1)) ~= 0 % 保证i在S中
                    for j = 1:n
                        if bitand(S, 2^(j-1)) == 0 % 保证j不在S中
                            dp(S+2^(j-1),j) = min(dp(S+2^(j-1),j), dp(S,i)+W(i,j));
                        end
                    end
                end
            end
        end
    end
end

% 找到最优值和最优路径
S = 2^n-2; % 除起点外所有节点的集合
[ans, i] = min(dp(S,:) + W(i,1));
path = i;
while S > 0
    for j = 1:n
        if bitand(S, 2^(j-1)) == 0 && dp(S,i) == dp(S+2^(j-1),j) + W(i,j)
          (略)
            break;
        end
    end
end


% 可视化结果
figure;
plot(V(path([1 end]),1), V(path([1 end]),2), 'b-', 'LineWidth', 2); % 绘制回到起点的路径
xlabel('X坐标', 'FontSize', 12);
ylabel('Y坐标', 'FontSize', 12);
title('最优切割路径可视化', 'FontSize', 14);
saveas(gcf, 'optimal_path.png', 'png', 'Resolution', 300); % 保存图片,300dpi
hold off;

根据求解结果,我们可以得到最小空程总长度和最优切割路径。最优切割路径给出了一个节点的访问顺序,使得按照该顺序切割可以得到最小的空程。从可视化结果中,我们可以直观地看到最优切割路径是如何避免不必要的空程,尽可能地保持切割的连续性。

问题二模型的建立与求解

问题二组合优化问题模型的建立

问题2给出了一个复杂的下料切割布局N2,其特点是外边界切割成上下对称的锯齿状,内部切割出四个半径为3的圆形和一个椭圆形。与问题1相比,问题2的切割布局复杂程度明显提高,切割线不再是简单的直线段,而是包含了锯齿形、圆形和椭圆形等复杂曲线。这就要求我们在建模时,要能够精确描述这些复杂曲线,并合理地将它们离散化为一系列的切割点。同时,由于切割线数量和切割点数量的增加,问题的规模也相应增大,对算法的设计和实现提出了更高的要求。

面对如此复杂的切割布局,我们首先需要将其数学化,用精确的数学语言描述出来。对于锯齿形边界,我们可以利用布局N2中给出的参数信息,通过三角函数来刻画锯齿的形状。具体地,设锯齿的峰值点坐标为 (𝑥𝑖,𝑦𝑖) ,则相邻两个峰值点之间的锯齿可以参数化表示为:

{𝑥=𝑥𝑖+𝑥𝑖+1−𝑥𝑖𝑡0𝑡,0≤𝑡≤𝑡0𝑦=𝑦𝑖+𝑦𝑖+1−𝑦𝑖2(1−cos⁡(𝜋𝑡0𝑡)),0≤𝑡≤𝑡0

其中 𝑡0 为锯齿的周期,可以根据布局N2中的参数计算得到。

对于圆形和椭圆形,我们可以直接使用它们的标准方程。以圆形为例,设其圆心坐标为 (𝑥𝑐,𝑦𝑐) ,半径为 𝑟 ,则其方程为:

椭圆形的方程类似,这里不再赘述。

在得到了各个切割曲线的数学表示后,我们需要对它们进行离散化处理。一个简单的做法是,在每条曲线上等间距地取若干个采样点,然后用直线段依次连接这些采样点,从而将曲线近似为折线。当然,采样点的数量和间距是一个需要仔细权衡的问题。采样点数量越多,折线对曲线的逼近就越精确,但同时问题的规模也会越大。因此,我们需要在逼近精度和计算效率之间寻找一个合适的平衡点。

离散化处理完成后,问题2就转化为在一个由大量直线段组成的复杂布局上求解最优切割路径的问题。这本质上仍然是一个图论问题,与问题1类似,我们可以将直线段看作图的边,将直线段的端点和交点看作图的节点,从而将切割布局转化为一个无向图 。与问题1不同的是,图 中的边不再是等权的,每条边的权重需要根据其所对应的直线段的长度来计算。设边 所对应的直线段的端点坐标分别为 和 ,则其权重 可以计算为:

在构建了图模型 之后,问题2就可以形式化地描述为在 上求解最小权重哈密尔顿回路问题:

min∑𝑒∈𝐸𝑤(𝑒)𝑥𝑒s.t.∑𝑒∈𝛿(𝑣)𝑥𝑒=2,∀𝑣∈𝑉∑𝑒∈𝐸(𝑆)𝑥𝑒≤|𝑆|−1,∀𝑆⊂𝑉,𝑆≠∅𝑥𝑒∈{0,1},∀𝑒∈𝐸

(后略)

基于贪心构造和 2−𝑜𝑝𝑡 局部搜索的切割路径优化算法

上述模型是一个经典的组合优化问题,求解难度很大。对于小规模的问题,可以使用混合整数规划(MIP)等精确算法求解。但对于大规模问题,求解MIP模型的计算成本将变得非常高昂。因此,我们需要考虑设计高效的启发式或近似算法。

一种可行的思路是利用切割布局的几何特征,设计针对性的构造式算法和局部搜索算法。具体地,我们可以从切割起点出发,根据某种贪心策略,如优先选择与当前点最近的未切割线段,逐步构造出一条切割路径。当然,这样得到的切割路径通常不是最优的,因此我们还需要在此基础上进行局部搜索,寻找可以改进的机会。一种常用的局部搜索策略是 𝑘−𝑜𝑝𝑡 交换,即每次选择路径上的 𝑘 条边,尝试用另外的 𝑘 条边替换,看是否可以减小总权重。 𝑘 的取值通常为2或3,以平衡搜索的深度和广度。

(详细模型算法建立略,见完整版)

基于贪心构造和 2−𝑜𝑝𝑡 局部搜索的切割路径优化求解步骤

以下是基于贪心构造和2-opt局部搜索的切割路径优化算法的主要步骤:

  1. 输入切割布局N2的参数信息,包括锯齿边界的峰值点坐标、圆形的圆心坐标和半径、椭圆形的中心坐标和长短轴半径等。

  2. 根据输入参数,计算出锯齿边界、圆形和椭圆形的数学表达式。对于锯齿边界,可以使用三角函数进行参数化表示;对于圆形和椭圆形,可以直接使用它们的标准方程。

  3. 对每条切割曲线进行等间距离散化。具体地,可以先计算出曲线的总长度,然后根据预设的采样间距,确定采样点的数量和位置。对于直线段,可以直接对端点坐标进行线性插值;对于圆弧和椭圆弧,可以将弧长参数化,然后对参数进行等间距采样。

  4. 根据离散化得到的切割点的坐标,计算出任意两个切割点之间的欧几里得距离,形成一个距离矩阵D。D是一个对称矩阵,其中 𝐷(𝑖,𝑗) 表示第 𝑖 个切割点和第 𝑗 个切割点之间的距离。

  5. 从指定的起点 𝑣0 出发,初始化一条空的切割路径 𝑃 。

  6. 从起点 𝑣0 开始,重复以下步骤,直到所有切割点都被访问:

(a) 在所有未访问的切割点中,选择与当前点距离最近的点 𝑣 ,即 𝑣=arg⁡min𝑢∈𝑉∖𝑃𝐷(𝑣curr,𝑢) ,其中 𝑣curr 表示当前点。

(b) 将 𝑣 加入切割路径 𝑃 ,并将 𝑣 标记为已访问。

(c) 将当前点 𝑣curr 更新为 𝑣 。

  1. 对切割路径 𝑃 进行2-opt局部搜索。具体地,重复以下步骤,直到无法继续改进:

(a) 对于 𝑃 上的每一对不相邻的边 (𝑣𝑖,𝑣𝑖+1) 和 (𝑣𝑗,𝑣𝑗+1) ,尝试将它们替换为 (𝑣𝑖,𝑣𝑗) 和 (𝑣𝑖+1,𝑣𝑗+1) ,计算新路径的总长度 𝐿new=𝐿(𝑃)−𝐷(𝑣𝑖,𝑣𝑖+1)−𝐷(𝑣𝑗,𝑣𝑗+1)+𝐷(𝑣𝑖,𝑣𝑗)+𝐷(𝑣𝑖+1,𝑣𝑗+1) ,其中 𝐿(𝑃) 表示当前路径 𝑃 的总长度。

(b) 如果 𝐿new<𝐿(𝑃) ,则更新 𝑃 为新路径,并将 𝐿(𝑃) 更新为 𝐿new 。(后略,完整见文末参考)

2024五一数学建模A题完整代码和成品论文获取↓↓↓↓↓

https://www.yuque.com/u42168770/qv6z0d/gyoz9ou5upvkv6nx?singleDoc#

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1640476.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于深度学习检测恶意流量识别框架(80+特征/99%识别率)

基于深度学习检测恶意流量识别框架 目录 基于深度学习检测恶意流量识别框架简要示例a.检测攻击类别b.模型训练结果输出参数c.前端检测页面d.前端训练界面e.前端审计界面&#xff08;后续更新了&#xff09;f.前端自学习界面&#xff08;自学习模式转换&#xff09;f1.自学习模式…

vue3 element-plus 让el-container占满屏幕

在刚开始用element-plus的布局时&#xff0c;发现无法占满屏幕&#xff1a; 在App.vue中添加如下css代码&#xff1a; <style>html, body, #app {margin: 0;padding: 0;height: 100%;} </style>同时布局代码所在的component如下所示&#xff1a; <template&g…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-8.1--C语言LED驱动程序

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

对stm32F103RCT6原理图解析(详细)

最近想了解一下原理图为什么这样设计&#xff0c;又发现网上虽然有相关的解析&#xff0c;但是不全面&#xff0c;所以唉还是自己动手&#xff0c;丰衣足食吧。 MCU部分 核心芯片STM32F103RCT6 (8条消息) stm32命名规则_BachelorTse的博客-CSDN博客 这里有芯片相关的命名规则…

在Windows中,matplotlibcpp的使用

0 前言 本篇文章记录一个c库的使用&#xff1a;matplotlib-cpp&#xff0c;其作用是在c中调用python的matplotlib&#xff0c;实现绘图操作。 对于Windows环境下使用该库的文章&#xff0c;发现文章依然存在一些问题&#xff0c;总是存在报错不能解决&#xff0c;花费了较多的…

QT的TcpServer

Server服务器端 QT版本5.6.1 界面设计 工程文件&#xff1a; 添加 network 模块 头文件引入TcpServer类和TcpSocket&#xff1a;QTcpServer和QTcpSocket #include <QTcpServer> #include <QTcpSocket>创建server对象并实例化&#xff1a; /*h文件中*/QTcpServer…

Python根据预设txt生成“你画我猜”题目PPT(素拓活动小工具)

Python根据预设txt生成“你画我猜”题目PPT&#xff08;素拓活动小工具&#xff09; 场景来源 去年单位内部的一次素拓活动&#xff0c;分工负责策划设置其中的“你画我猜”环节&#xff0c;网络上搜集到题目文字后&#xff0c;想着如何快速做成对应一页一页的PPT。第一时间想…

观察者模式实战:解密最热门的设计模式之一

文章目录 前言一、什么是观察者模式二、Java实现观察者模式2.1 观察者接口2.2 具体观察者2.3 基础发布者2.4 具体发布者2.5 消息发送 三、Spring实现观察者模式3.1 定义事件类3.2 具体观察者3.3 具体发布者3.4 消息发送 总结 前言 随着系统的复杂度变高&#xff0c;我们就会采…

Google 发布 CodeGemma 7B,8K上下文,性能超CodeLlama 13B

CodeGemma简介 CodeGemma模型是谷歌的社区开放编程模型&#xff0c;专门针对代码领域进行优化。一系列功能强大的轻量级模型&#xff0c;能够执行多种编程任务&#xff0c;如中间代码填充、代码生成、自然语言理解、数学推理和指令遵循。CodeGemma模型是在大约500B个主要为英语…

【算法入门教育赛1D】环形密码 - 字符串 | C++题解与代码

题目链接&#xff1a;https://www.starrycoding.com/problem/161 题目描述 小 e e e有一个宝箱&#xff0c;这个宝箱有一个长度为 n n n的密码&#xff0c;但是这个密码校验器是一个环形&#xff0c;意思是只要密码从任意一位开始读&#xff08;读到最后一位回到第一位继续&a…

每日OJ题_贪心算法二⑤_力扣870. 优势洗牌(田忌赛马)

目录 力扣870. 优势洗牌&#xff08;田忌赛马&#xff09; 解析代码 力扣870. 优势洗牌&#xff08;田忌赛马&#xff09; 870. 优势洗牌 难度 中等 给定两个长度相等的数组 nums1 和 nums2&#xff0c;nums1 相对于 nums2 的优势可以用满足 nums1[i] > nums2[i] 的索引…

Redis - Zset 有序集合

前言 它保留了集合不能有重复成员的特点&#xff0c;但与集合不同的是&#xff0c;有序集合中的每个元素都有⼀个唯⼀的浮点类型的分数&#xff08;score&#xff09;与之关联&#xff0c;有序集合中的元素是可以维护有序性的&#xff0c;但这个有序不是⽤下标作为排序依据⽽是…

笔记13-OSError: [Errno 24] Too many open files

文章目录 参考文献失败尝试系列查看发现&#xff0c;似乎是因为线程数有限制 修改配置先查查看 增加文件数限制&#xff0c;然后使用命令运行&#xff08;成功&#xff09; 参考文献 Linux 最大可以打开多少文件描述符&#xff1f; OSError: [Errno 24] Too many open files错…

Redis-单机安装

试图从官网注册不了我也不知道什么情况。 网盘自取吧&#xff0c;链接&#xff1a;https://pan.baidu.com/s/1KERBQaH9gCT10AGt9z0_jg?pwdyjen 安装比较简单&#xff0c;照着敲就完了每一步都试过了&#xff0c;先单机安装&#xff0c;后面搭建集群。 1.将安装包放到/usr/…

一文带你了解MySQL的索引分类

文章目录 ☃️分类☃️演示图☃️思考☃️总结 欢迎来到 请回答1024 的博客 &#x1f353;&#x1f353;&#x1f353;欢迎来到 请回答1024的博客 关于博主&#xff1a; 我是 请回答1024&#xff0c;一个追求数学与计算的边界、时间与空间的平衡&#xff0c;0与1的延伸的后端开…

C++之set/map相关实现

看着上面的图片&#xff0c;你可能对set和map的多样变化产生疑惑&#xff0c;下面我们就来详细讲解他们的区别以及实现 一.set/map 首先&#xff0c;在这里我们要声明&#xff0c;如果你对二叉搜索树一点都不了解的话&#xff0c;建议你先去将搜索二叉树学会再来学习这里的内…

MFC 列表控件删除实例(源码下载)

1、本程序基于前期我的博客文章《MFC下拉菜单打钩图标存取实例&#xff08;源码下载) 》 2、程序功能选中列表控件某一项&#xff0c;删除按钮由禁止变为可用&#xff0c;点击删除按钮&#xff0c;选中的项将删除。 3、首先在主界面添加一个删除参数按钮。 4、在myDlg.cpp 文件…

Python语言零基础入门——文件

目录 一、文件的基本概念 1.文件 2.绝对路径与相对路径 3.打开文件的模式 二、文件的读取 三、文件的追加 四、文件的写入 五、with语句 六、csv文件 1.csv文件的读取 2.csv文件的写入 七、练习题&#xff1a;实现日记本 一、文件的基本概念 1.文件 文件是以计算…

win10禁止自动更新的终极方法

添加注册表值 1.运行&#xff0c;输入regedit 2.打开注册表编辑器依次进入以下路径“计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings”。 3.在Settings项中&#xff0c;新建DWORD&#xff08;32位&#xff09;值(D)&#xff0c;重命名为以下命名“Fl…

python判断大图中包含小图并输出位置总结

python判断大图中包含小图并输出位置总结 没啥可说的&#xff0c;项目遇到了就直接上代码&#xff0c;可以减轻劳动力&#xff0c;花最少得时间实现应用功能。 import cv2 # 读取大图片和小图片的路径 img_big cv2.imread(big_image.png) img_small cv2.imread(small_image…