当前位置: 首页 > news >正文

【动态规划】--- 斐波那契数模型

 Welcome to 9ilk's Code World

       

(๑•́ ₃ •̀๑) 个人主页:       9ilk

(๑•́ ₃ •̀๑) 文章专栏:     算法Journey 


🏠 第N个泰波那契数模型

📌 题目解析

第N个泰波那契数

  • 题目要求的是泰波那契数,并非斐波那契数。

📌 算法原理

🎵 递归

函数设置:我们可以设置一个Taibo()函数,它能帮我们求出第n个泰波那契数。

函数返回值:题目保证answer <= 2^31 - 1,设置为int即可。

函数实现:根据定义求泰波那契数,我们需要前三个的泰波那契数相加,也就是Taibo(n-3) + Taibo(n-2) + Taibo(n-1)。

函数边界条件:对于n = 0,1,2是边界情况,我们可以提前处理。

参考代码:

class Solution {
public:long Taibo(int n){if(n == 0)return 0;if(n == 1 || n == 2)return 1;return Taibo(n-1) + Taibo(n-2) + Taibo(n-3);}int tribonacci(int n){return Taibo(n);}
};

🎵 记忆化搜索

对于解法一存在下面的问题:

我们发现在递归过程有的节点的值(比如上图的Taibo(3))在第3层就已经求得了,但是其他节点递归深入时又重新计算了,导致了不必要的时间和栈空间的开销(时间复杂度:O(3^n),空间复杂度:O(N))。本题虽然n最大为37,但其实栈空间和时间开销已经很大了,肯定会超时,我们可以采取记忆化搜索的方法:

1. 添加一个备忘录。

2. 每次递归返回时,将结果放到备忘录里面。

3. 在每次进入递归时,往备忘录里查询是否已经记录。

参考代码:

class Solution {
public:vector<int> memory;long Taibo(int n){if (memory[n] != -1) //查看备忘录return memory[n];long ret = Taibo(n - 1) + Taibo(n - 2) + Taibo(n - 3);;memory[n] = ret; //存进备忘录return ret;}int tribonacci(int n){memory.resize(38, -1); //创建一个备忘录memory[0] = 0;memory[1] = memory[2] = 1;return Taibo(n);}
};
  • 此时比之前大大避免了不必要的时间开销,时间复杂度是(n)。

🎵 动态规划

我们动态规划分为以下几步:

1. 状态表示:

  • 所谓状态表示其实是dp表里每个值代表的含义。

Q:状态从何而来?

  • 题目要求(比如本题已经告诉我们要求的是第n个泰波那契数)。
  • 经验 + 题目要求(后面我们再提)。
  • 分析问题的过程,发现重复的子问题。

因此,本题dp[i]的含义是第i个泰波那契数。

2. 状态转移方程:

状态转移方程回答的是dp[i]怎么得到的问题,一般我们从"最近一步"得到。

比如本题中,由定义知,在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2,不就是dp[i] = dp[i-1] + dp[i-2] + dp[i-3]吗?

3. 初始化:

初始化保证我们填表的时候不发生越界!

当遇到n=2时,此时n-3=-1很明显会会发生越界,因此对于边界情况,我们可以提前确定好边界位置在dp表中的值,即dp[0] = 0, dp[1] = dp[2] = 1。

4. 填表顺序:

动态规划需要状态的推导,只有确定好填表顺序,才能确保在填写当前状态时,所需要的状态已经计算过了。

本题很明显是从左往右填表

5. 返回值:

我们需要根据题目要求+状态表示来确定返回值。

注:dp[i]不一定就是我们所需的返回值,我们还需结合题目要求,本题dp[n]就是我们需要的返回值。

参考代码:

class Solution 
{
public:int tribonacci(int n){//1.状态表示:dp[i]表示第N个泰波那切数vector<int> dp(38,-1);//2.初始化dp[0] = 0;dp[1] = dp[2] = 1;//3.填表for(int i = 3 ; i <= n ; i ++){dp[i] = dp[i-1] + dp[i-2] + dp[i-3];//4.状态转移方程} return dp[n];//5.返回值}
};

时间复杂度:O(N)

空间复杂度:O(1)

🎵 滚动数组

我们用vector容器来模拟dp表,但其实可以进一步优化,当求dp[i]只有前面的若干个状态,最前面的几个状态不需要浪费空间,此时可以使用滚动数组优化

我们可以利用四个变量来储存最近一次求泰波那契数的四个状态,不断进行滚动,最终求得目标结果!

注:对于赋值顺序,不能从右往左赋,即c = d,b = c, a = b因为d给c之后,c被d覆盖了,但是b想要的是c的,而c原本的值被覆盖了!

参考代码:

class Solution 
{
public:int tribonacci(int n){//1.状态表示:dp[i]表示第N个泰波那切数if (n == 0) return 0;if (n == 1 || n == 2) return 1;int a = 0;int b = 1;int c = 1;int d = 0;//3.填表for (int i = 3; i <= n; i++){d = a + b + c;;//状态转移方程a = b;b = c;c = d;}return d;}
};

🏠 三步问题

📌 题目解析

三步问题

📌 算法原理

1. 状态表示(经验 + 题目要求):

  • 状态表示:dp[i]表示到达i位置时,一共有多少种方法。

2. 状态转移方程:

我们从i位置的状态,最近的一步来划分问题,由于小孩一次可以上1阶,2阶,3阶:

  • 从i-1位置上来,此时dp[i] += dp[i-1]。
  • 从i-2位置上来,此时dp[i] += dp[i-2]。
  • 从i-3位置上来,此时dp[i] += dp[i-3]。

因此状态转移方程:dp[i] = dp[i-1] + dp[i-2] + dp[i-3]

3. 初始化:

 对于第1,2,3级的台阶,取它们的最近状态可能会造成数组越界(比如i为2时,i-3得-1会越界),因此我们可以提前设置好它们的状态:dp[1] = 1 , dp[2] = 2,dp[3] = 4

4. 填表顺序:

由状态转移方程知,我们i位置的状态依赖于前几个位置的状态,因此我们填表顺序是从左往右填。

5.返回值:

我们要求的是上到第n阶楼梯的总方法,直接返回dp[n]即可,注意要对结果模1000000007

参考代码:

class Solution 
{
public:int waysToStep(int n){if(n == 1 || n == 2) return n;if(n == 3) return 4;long a = 1; //dp[1]long b = 2; //dp[2] long c = 4; //dp[3]long d = 0; for(int i = 4 ; i <= n ; i ++) //空间优化{d = (a + b + c)%1000000007; //状态转移方程a = b;b = c;c = d;}      return d;}
};

🏠 最小花费爬楼梯

📌 题目解析

最小花费爬楼梯

  • 假设n为数组元素个数,则本题中楼梯顶部指的是dp[n],并非dp[n-1]。

📌 算法原理

🎵 解法一 (以i位置为结尾)

1. 状态表示:

  • dp[i]表示:到达 i 位置时,所需支付的最少费用。

2. 状态转移方程:

用i位置的最近一步(之前或之后的状态),推导出dp[i]的值。

  • 当到达i-1位置时,支付cost[i-1],走一步到达i位置 -> dp[i-1] + cost[i-1]。
  • 当到达i-2位置时,支付cost[i-2],走两步到达i位置 -> dp[i-2] + cost[i-2]。
  • 我们要么选择从i-1位置到i,要么选择从i-2位置到i,我们要的是最小花费,则选最小的即可。

因此状态转移方程:dp[i] = min(dp[i-1]+cost[i-1] , dp[i-2] + cost[i-2])。

3.初始化

我们需要保证填表的时候不越界,本题可以选择从下标为0或下标为1的位置开始爬楼梯,因此这两个位置最初的花费是0,即dp[0] = dp[1] = 0。

4. 填表顺序

根据我们的状态转移方程,我们需i位置之前的状态,因此填表顺序是从左往右填。

5. 返回值

返回达到楼梯顶部的最低花费,返回dp[n]即可。

参考代码:

class Solution {
public:int minCostClimbingStairs(vector<int>& cost) {int n = cost.size();if(n == 1 || n == 0) return  0;vector<int> dp(n+1);dp[0] = dp[1] = 0 ; //初始化for(int i = 2 ; i <= n ; i ++) {dp[i] = min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);}   //状态转移方程return dp[n]; //返回值}
};

🎵 解法二 (以i位置为起点)
 

1. 状态表示:

  • dp[i]表示:从i位置出发,所需支付的最少费用。

2. 状态转移方程:

用i位置的最近一步(之前或之后的状态),推导出dp[i]的值。

  • 支付cost[i], 往后走一步,从i+1的位置出发到终点 -> dp[i+1] + cost[i]
  • 支付cost[i], 往后走两步,从i+2的位置出发到终点 -> dp[i+2] + cost[i]
  • 我们从i位置要么选择走一步到终点,要么选择走两步到终点,我们要的是最小花费,则选最小的即可。

因此状态转移方程:dp[i] = min(dp[i+1] + cost[i] , dp[i+2] + cost[i])。

3.初始化

对于n-1位置和n-2位置作为出发点,此时他们走一步或两步就到顶部了,因此i+1和i+2会使他们越界,我们只需支付他们对应的cost即可,即dp[n-1] = cost[n-1] && dp[n-2] = cost[n-2]

4. 填表顺序

根据我们的状态转移方程,我们需i位置之后的状态,因此填表顺序是从右往左填。

5. 返回值

我们是从0或1位置为起点出发的,我们返回两者最小即可,即min(dp[0],dp[1])。

参考代码:

class Solution {
public:int minCostClimbingStairs(vector<int>& cost) {int n = cost.size();vector<int> dp(n);dp[n-2] = cost[n-2] ;dp[n-1] = cost[n-1];for(int i = n-3 ; i >= 0 ; i--){dp[i] = min(dp[i+1]+cost[i],dp[i+2]+cost[i]);} return min(dp[1],dp[0]);}
};

🏠 解码方法

📌 题目解析

91. 解码方法 - 力扣(LeetCode)

  • 本题可能存在无法解码的字符串。
  • 字符串中可能包含前导0。

📌 算法原理

1.状态表示:

根据经验+题目要求,我们可以设置dp[i]的状态:字符串以i位置结尾时,解码方法的总数

2. 状态转移方程:

我们还是按照最近一步来划分问题,对于i位置的解码我们以下两种情况:

(1) s[i] 单独解码:

  • 解码成功('1' <= s[i] <= '9',‘0’无法参与解码),此时解码总方法等于前一个位置的解码方法总数,即dp[i-1]。 
  • 解码失败,此时为0

(2) s[i] 与 s[i-1]解码

  • 解码成功(0 <= b*10+a <= 26),时解码总方法等于第i-2个位结尾字符串的解码方法总数,即dp[i-2]。 
  • 解码失败,此时为0

因此状态转移方程为:dp[i] = dp[i-1] + dp[i-2]

3. 初始化:

(1) i = 0时,位于字符串的第一个字符,我们只需判断它单独解码情况是否成立,取值可能为0,1。

(2) i = 1时,位于字符串的第二个字符,首先要单独解码就得先判断第一个字符能否单独解码否则没意义,能单独解码则dp[1]++;再判断与s[0]是否能解码,能则dp[1]++。其可能取值为0,1,2。

4. 状态转移方程 :

根据状态转移方程,我们需要之前位置的状态,因此填表顺序是从左往右。

5. 返回值:

由题意得,最终需要的是以size-1为位置结尾的字符串的所有解码方法,因此返回dp[size-1]。

参考代码:

class Solution {
public:int numDecodings(string s){int n = s.size();vector<int> dp(n);dp[0] = s[0] != '0';//初始化处理边界if(n == 1) return dp[0];if(s[0] != '0' && s[1] != '0') dp[1] += 1;//s[1]单独解码int t = (s[0]-'0')*10 + s[1] - '0'; if(t >= 10 && t <= 26) dp[1] += 1 ;//s[1]与前一个位置解码for(int i = 2 ; i < n ; i ++){//一个数编码if(s[i] != '0') dp[i] += dp[i-1];//两个数编码int t = (s[i-1]-'0')*10 + s[i] - '0'; if(t >= 10 && t <= 26) dp[i] += 1;}return dp[n-1];}
};

🎵 优化(虚拟节点)

Q:我们发现这两段代码相似度较高,处理逻辑是一样的,能不能把边界情况放进循环里处理呢?

这里我们介绍一下虚拟节点

我们可以在原dp表基础上扩充一个位置,保证最后一个位置下标为n,这样在处理字符串中原来下标为0位置的字符时,它在新dp表的下标变为1,这样i-1就不会越界!但是同时要注意两个问题:

1. 虚拟节点里面的值,要保证后面的填表时正确的。(比如对于新dp表的0下标位置,我们要保证对于如果字符串第二个位置的字符能跟第一个字符解码,此时需要新dp表i-2位置的值,也就是dp[0],此时我们需要设置它为1,表示存在第二个字符和第二个字符共同解码这一种解码方法)

2. 下标的映射关系:我们新dp表下标在原来基础上+1,但是s[i]的size并没有变化!

class Solution
{
public:int numDecodings(string s)
{
//优化int n=s.size();vector<int>dp(n + 1);dp[0]=1;//保证后面的填表是正确的dp[1]= s[1 - 1] != '0';
注意映射关系s[1-1]下标映射关系for(inti=2;i<=n;i++){if(s[i-1]!='0')dp[i]+=dp[i-1];//处理单独编码的情况int =(s[i-2]-'0')*10+s[i-1]-'0';//第二种情况所对应的数if(t>=10 &&t<=26)dp[i]+=dp[i] += dp[i - 2];}return dp[n];
}

完。

相关文章:

【动态规划】--- 斐波那契数模型

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; 算法Journey &#x1f3e0; 第N个泰波那契数模型 &#x1f4cc; 题目解析 第N个泰波那契数 题目要求的是泰波那契数&#xff0c;并非斐波那契数。 &…...

生信软件管家——conda vs pip

pip vs conda&#xff1a; 安装过python包的人自然两种管理软件都用过&#xff0c; Pip install和Conda install在Python环境中用于安装第三方库和软件包&#xff0c;但它们在多个方面存在显著的区别 总的来说&#xff1a; pip是包管理软件&#xff0c;conda既是包管理软件&…...

代码随想录——串

文章目录 反转字符串反转字符串Ⅱ路径加密反转字符串中的单词动态口令字符串匹配重复的子字符串 反转字符串 344. 反转字符串 //前后对应交换 //0<->sSize-1 //1<->sSize-2 //... //i<->sSize-1-i,i0,1,...,(sSize-1)/2 void reverseString(char* s, int s…...

詳細講一下RN(React Native)中的列表組件FlatList和SectionList

1. FlatList 基礎使用 import React from react; import { View, Text, FlatList, StyleSheet } from react-native;export const SimpleListDemo: React.FC () > {// 1. 準備數據const data [{ id: 1, title: 項目 1 },{ id: 2, title: 項目 2 },{ id: 3, title: 項目 3…...

TDengine 与上海电气工业互联网平台完成兼容性认证

在工业数字化转型和智能化升级的浪潮中&#xff0c;企业对高效、可靠的数据管理解决方案的需求日益增长。特别是在风电智能运维、火电远程运维、机床售后服务等复杂多样的工业场景下&#xff0c;如何实现海量设备和时序数据的高效管理&#xff0c;已经成为推动行业升级的关键。…...

随机矩阵投影长度保持引理及其证明

原论文中的引理 2 \textbf{2} 2 1. \textbf{1. } 1. 引理 1 \textbf{1} 1(前提之一) 1.1. \textbf{1.1. } 1.1. 引理 1 \textbf{1} 1的内容 &#x1f449;前提&#xff1a; X ∼ N ( 0 , σ ) X\sim{}N(0,\sigma) X∼N(0,σ)即 f ( x ) 1 2 π σ e – x 2 2 σ 2 f(x)\text{}…...

深度学习利用数据加载、预处理和增强数据提高模型的性能

深度学习数据预处理是一个关键步骤&#xff0c;旨在提高模型的性能和准确性。 通过数据加载、预处理和增强&#xff0c;可以显著提高深度学习模型的性能和准确性。在实际应用中&#xff0c;需要根据具体的数据和任务来选择合适的预处理和增强技术。 以下将详细论述并举例说明如…...

ESP32服务器和PC客户端的Wi-Fi通信

ESP32客户端-服务器Wi-Fi通信 本指南将向您展示如何设置ESP32板作为服务端&#xff0c;PC作为客户端&#xff0c;通过HTTP通信&#xff0c;以通过Wi-Fi&#xff08;无需路由器或互联网连接&#xff09;交换数据。简而言之&#xff0c;您将学习如何使用HTTP请求将一个板的数据发…...

新型人工智能“黑帽”工具:GhostGPT带来的威胁与挑战

生成式人工智能的发展既带来了有益的生产力转型机会&#xff0c;也提供了被恶意利用的机会。 最近&#xff0c;Abnormal Security的研究人员发现了一个专门为网络犯罪创建的无审查AI聊天机器人——GhostGPT&#xff0c;是人工智能用于非法活动的新前沿&#xff0c;可以被用于网…...

Spring MVC (三) —— 实战演练

项目设计 我们会将前端的代码放入 static 包下&#xff1a; 高内聚&#xff0c;低耦合 这是我们在实现项目的设计思想&#xff0c;一个项目里存在很多个模块&#xff0c;每一个模块内部的要求类与类、方法与方法要相互配合紧密联系&#xff0c;这就是高内聚&#xff0c;低耦合…...

媒体新闻发稿要求有哪些?什么类型的稿件更好通过?

为了保证推送信息的内容质量&#xff0c;大型新闻媒体的审稿要求一向较为严格。尤其在商业推广的过程中&#xff0c;不少企业的宣传稿很难发布在这些大型新闻媒体平台上。 媒体新闻发稿要求有哪些&#xff1f;就让我们来了解下哪几类稿件更容易过审。 一、媒体新闻发稿要求有哪…...

【游戏设计原理】82 - 巴斯特原则

巴斯特原则的核心是“对你的玩家好一点”&#xff0c;这一点直击游戏设计的核心——玩家体验。 现代游戏设计不仅要注重挑战性&#xff0c;还要关注玩家的情绪波动与行为反应。当玩家因为过高的难度感到挫败甚至愤怒时&#xff0c;他们往往选择退出游戏&#xff0c;而不是迎接…...

DDD架构实战第六讲总结:领域驱动设计中的聚合

云架构师系列课程之DDD架构实战第六讲总结:领域驱动设计中的聚合 聚合提升了对象系统的粒度,保证了业务逻辑的完整性,减少了错误产生的概率 一、引言 本讲将探讨领域驱动设计(DDD)中的重要概念——聚合。聚合是业务完整性的单元,是一个更大力度的封装。在领域驱动设计中…...

vim如何设置自动缩进

:set autoindent 设置自动缩进 :set noautoindent 取消自动缩进 &#xff08;vim如何使设置自动缩进永久生效&#xff1a;vim如何使相关设置永久生效-CSDN博客&#xff09;...

C++入门14——set与map的使用

在本专栏的往期文章中&#xff0c;我们已经学习了STL的部分容器&#xff0c;如vector、list、stack、queue等&#xff0c;这些容器统称为序列式容器&#xff0c;因为其底层是线性序列的数据结构&#xff0c;里面存储的是元素本身。而本篇文章我们要来认识一下关联式容器。 &am…...

单片机内存管理剖析

一、概述 在单片机系统中&#xff0c;内存资源通常是有限的&#xff0c;因此高效的内存管理至关重要。合理地分配和使用内存可以提高系统的性能和稳定性&#xff0c;避免内存泄漏和碎片化问题。单片机的内存主要包括程序存储器&#xff08;如 Flash&#xff09;和数据存储器&a…...

【gopher的java学习笔记】Java中Service与Mapper的关系详解

在后端开发中&#xff0c;Java作为一种广泛使用的编程语言&#xff0c;其架构设计和层次划分对于系统的可维护性、可扩展性和性能有着至关重要的影响。特别是在使用MyBatis等持久层框架时&#xff0c;Service层与Mapper层的关系更是值得深入探讨。本文将从Java Web应用程序的角…...

2025美赛B题完整代码+建模过程

问题一 为朱诺市建立一个可持续旅游产业模型。具体要求包括考虑游客数量、总收入,以及为稳定旅游业而实施的措施,明确优化因素和约束条件,并制定额外收入的支出计划,展示这些支出如何反馈到模型中以促进可持续旅游业发展,同时进行敏感性分析,讨论哪些因素最为重要。 为了…...

【MySQL】我在广州学Mysql 系列——MySQL用户管理详解

ℹ️大家好&#xff0c;我是练小杰&#xff0c;本博客是春节前最后一篇了&#xff0c;在此感谢大佬们今年的支持&#xff01;&#xff01;&#x1f64f;&#x1f64f; 接下来将学习MYSQL用户管理的相关概念以及命令~~ 回顾&#xff1a;&#x1f449;【MYSQL触发器的使用】 数据…...

Linux-rt下卡死之hrtimer分析

Linux-rt下卡死之hrtimer分析 日志 超时读过程分析 #define readl_poll_timeout(addr, val, cond, delay_us, timeout_us) \readx_poll_timeout(readl, addr, val, cond, delay_us, timeout_us)34 #define readx_poll_timeout(op, addr, val, cond, sleep_us, timeout_us) \…...

【AI日记】25.01.24

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】 AI kaggle 比赛&#xff1a;Forecasting Sticker Sales 读书 书名&#xff1a;法治的细节作者&#xff1a;罗翔 律己 AI&#xff1a;8 小时&#xff0c;良作息&#xff1a;00:30-8:30&…...

React 中hooks之useSyncExternalStore使用总结

1. 基本概念 useSyncExternalStore 是 React 18 引入的一个 Hook&#xff0c;用于订阅外部数据源&#xff0c;确保在并发渲染下数据的一致性。它主要用于&#xff1a; 订阅浏览器 API&#xff08;如 window.width&#xff09;订阅第三方状态管理库订阅任何外部数据源 1.1 基…...

C++11新特性之decltype

1.decltype的作用 decltype是C11新增的一个关键字&#xff0c;与auto的功能一样&#xff0c;都是在编译期间推导变量类型的。不了解auto的可以转到——C11新特性之auto。 为什么引入decltype&#xff1f;看过上边那篇博客的读者应该知道auto在有些场景中并不适用,所以引入declt…...

二叉树相关oj题 1. 检查两颗树是否相同。

二叉树相关oj题 检查两颗树是否相同。OJ链接 另一颗树的子树。OJ链接 if(rootnull)易漏掉 会导致空指针异常翻转二叉树。OJ链接...

element tbas增加下拉框

使用Tabs 标签页的label插槽&#xff0c;嵌入Dropdown 下拉菜单&#xff0c;实现Tabs 标签页增加下拉切换功能 Tabs 标签页 tab-click"事件"&#xff08;这个事件当中到拥有下拉框的tab里时&#xff0c;可以存一下Dropdown 第一个菜单的id&#xff0c;实现点击到拥有…...

新浪安卓(Android)开发面试题及参考答案(68道题,9道手撕题)

链表判环,找入口 思路: 判断是否有环:使用快慢指针,快指针每次走两步,慢指针每次走一步,如果它们相遇,说明有环。找出环入口:当判断出有环后,将慢指针重新指向头节点,然后快慢指针同时以相同速度移动,再次相遇的节点就是环的入口。以下是判断链表是否有环以及找出环…...

Zbrush导入笔刷

Zbrush笔刷目录: ...\Zbrush\ZStartup\BrushPresets...

实战演示:利用ChatGPT高效撰写论文

在当今学术界&#xff0c;撰写论文是一项必不可少的技能。然而&#xff0c;许多研究人员和学生在写作过程中常常感到困惑和压力。幸运的是&#xff0c;人工智能的快速发展为我们提供了新的工具&#xff0c;其中ChatGPT便是一个优秀的选择。本文将通过易创AI创作平台&#xff0c…...

大数据学习之SCALA分布式语言三

7.集合类 111.可变set一 112.可变set二 113.不可变MAP集合一 114.不可变MAP集合二 115.不可变MAP集合三 116.可变map一 package com . itbaizhan . chapter07 //TODO 2. 使用 mutable.Map 前导入如下包 import scala . collection . mutable // 可变 Map 集合 object Ma…...

k8s简介,k8s环境搭建

目录 K8s简介环境搭建和准备工作修改主机名&#xff08;所有节点&#xff09;配置静态IP&#xff08;所有节点&#xff09;关闭防火墙和seLinux&#xff0c;清除iptables规则&#xff08;所有节点&#xff09;关闭交换分区&#xff08;所有节点&#xff09;修改/etc/hosts文件&…...