對01背包的分析與理解(圖文)

?

首先謝謝Christal_R的文章(點擊轉到鏈接)讓我學會01背包

本文較長,但是長也意味著比較詳細,希望您可以耐心讀完。

題目:

現在有一個背包(容器),它的體積(容量)為V,現在有N種物品(每個物品只有一個),每個物品的價值W[i]和占用空間C[i]都會由輸入給出,現在問這個背包最多能攜帶總價值多少的物品?

一.動態規劃與遞推解決01背包

初步分析:

0.?淺談問題的分解

在處理到第i個物品時,可以假設一共只有i個物品,如果前面i-1個物品的總的最大價值已經定下來了,那么第i個物品選不選將決定這1~i個物品能帶來的總的最大價值

剛剛是自頂向下,接下來反過來自底向上,第1個物品選不選可以輕松地用初始化解決,接下來處理第i個物品時,假設只有2個物品就好,那他處理完后前2個物品能帶來的最大總價值就確定了,這樣一直推下去,就可以推出前n個物品處理完后能帶來的最大總價值

?

1.分層考慮解決"每個物品最多只能裝一次"

每個物品只能裝一次,那么就應該想到常用的一種方法,就是用數組的縱軸來解決,對于n個物品,為它賦予i=1~n的編號,那么數組的縱軸就有n層,每層只考慮裝不裝這個物品,那么分層考慮就可以解決最多裝一個的問題了

?

2.對0,1的理解

對于每個背包,都只有0和1的情況,也就是拿或者不拿兩種情況

如果拿:那么空間就會減一點,比如說現在在考慮第i個物品拿不拿,如果說當前剩余空間為j,那么拿了之后空間就變為j-c[i],但是總價值卻會增加一點,也就是增加w[i]

如果不拿:那么空間不會變,還是j,但是總價值也不會變化

?

3.限制條件

所以對于這題來說有一個限制條件,就是空間不超出,然后目標就是在空間不超出的情況塞入物品使總價值最大,在前面,我們已經講了數組的縱軸用來表示當前處理到第幾個物品,那么只靠這個是不夠的,而且這個數組的意義還沒有講

這題就是限制條件(空間)與價值的平衡,你往背包中塞東西,價值多了,可是空間少了,這空間本來可能遇到性價比更高的物品但也可能沒遇到

4.具體的建立數組解決問題

有了前面的限制情況和0,1的分析就可以建立數組了

對于這個數組,結合題目要求來說,數組的意義肯定是當前的總價值,也就是第i個物品的總價值,那么題目還有一個限制條件,只靠一個n層的一維數組是不夠的,還需要二維數組的橫軸來分析當前的剩余容量

所以我們有了一個數組可以來解決問題了,這個數組就叫f好了,然后它是一個二維數組,它的縱軸有i層,我希望它從i=1~n,不想從下標0開始是為了美觀,然后這個二維數組的橫軸代表著當前剩余的空間,就用j來表示,j=0~V,0就是沒有空間的意思,V前面說了,是這個背包的總容量

我們把這個二維數組建立在int main()的上面,所以它一開始全部都是0,省去了接下來賦初值為0的功夫

有了數組f[i][j],然后對于每個f[i][j],它表示的是已經處理到第i個物品了,當剩余空間還有j時,能帶有的最大價值,也就是說f[i][j]存儲的是總價值

說是總價值,可是涉及到放物品還是不放物品的問題,所以再細致點就是:當前剩余空間為j,用這j空間取分析第i個物品裝不裝如,處理執行完行為后,f[i][j]就表示了當前能裝入的最大價值

?

5.推導遞推方程

PS:談一下對于動態規劃遞推的理解:處理到第i層時,假設前i-1層的數據都知道而且可以根據1~i-1層的數據推出i,那么就成功了一半了,因為第i層如此,那么第i-1層也可以根據1~i-2層推出,接下來只需要定義好數組的初始條件和注意邊緣問題以及一些細節就可以了

對于第i個物品,假設前i-1個物品都已經處理完

如果第i個物品不能放入:這種情況就是背包已經滿了,也就是當前剩余空間j小于第i個物品的占用空間C[i],

這種情況下,空間沒有變化,價值也沒有變化,對于空間沒有變化,即第i個物品的空間和第i-1個物品的空間j相同,對于價值沒有變化,也就是數組f的值相同,然后開始利用前面的數據,也就是f[i][j]]=f[i-1][j]

?

如果第i個物品不想放入,那么和不能放入其實是一樣的,動機不同但結果相同,f[i][j]]=f[i-1][j]

?

如果第i個物品放入了,那么f[i][j]=f[i-1][j-c[[i]]+w[i],下面解釋一下這個公式,第i個物品的占用空間為c[i],價值為w[i],f[i-1][j-c[[i]]+w[i]表示前i-1個物品在給它們j-c[[i]空間時能帶來的最大價值

再回到第i個物品的角度,此時有j個空間,如果已經確定要放入,為了使空間充分利用,肯定是這j個空間只分c[i](剛好夠塞下第i個物品),剩下的j-c[[i]全部給前面i-1個物品自由發揮,反正前面f[i-1][j-c[[i]]已經知道了,然后前面i-1個物品用j-c[i]的空間能帶來最大的利益f[i-1][j-c[[i]],第i個物品用c[i]的空間帶來利益w[i],所以如果第i個物品放入后,總利益是f[i][j]=f[i-1][j-c[[i]]+w[i]

?

但是,長遠來說,有一些偏極端情況,放入這個物品,也許它價值w[i]很高,但是它占用空間c[i]也大,它的性價比可能很低,所以這時候就需要max函數了

當還有空間時:F[i,j] = max[F[i?1,j],F[i?1,j?C[i]] + W[i]

當空間不夠時:F[i,j] = F[i?1,j]

下面一個個解釋:

當還有空間時:這時有兩種方法,放還是不放,如果放,那么利益由兩段組成1~i-1是一段,i是另一段;如果不妨,那么利益和上一層剩j空間時相同,這兩個東西大小需要比較,因為如果放入,雖然加上了w[i],利益,可是沖擊了前i-1個物品的利益,如果不放,那么沒有收獲到第i個物品的利益,但是把原來屬于1~i的空間j,分給了1~i-1個物品,說不定前1~i-1的每個物品都空間小,價值高,性價比高呢?

當空間不夠時,它也只能F[i,j] = F[i?1,j]了,沒有選擇的余地

?

#include<bits/stdc++.h>//萬能頭文件
#define ll long long
using namespace std;
const ll maxn=100;
ll n,v,f[maxn][maxn];
ll c[maxn];//每個物品占用空間
ll w[maxn];//每個物品的價值
int main()
{cin>>n>>v;for(ll i=1;i<=n;i++)scanf("%lld",&c[i]);for(ll i=1;i<=n;i++)scanf("%lld",&w[i]);for(ll i=1;i<=n;i++)//第i個物品for(ll j=v;j>=0;j--)//剩余空間j
        {if(j >= c[i])//如果裝得下f[i][j]=max( f[i-1][j-c[i]]+w[i],f[i-1][j]);else//如果裝不下f[i][j]=f[i-1][j];}cout<<f[n][v]<<endl;//輸出答案

}
01背包普通版代碼
點擊加號展開代碼,如果點不開可以看底下的代碼

?

?

二.01背包的空間優化

有了前面基礎版01背包的學習,現在學習這個就容易多了

1.何為空間優化,為什么要空間優化

在01背包中通過對數組的優化(用了滾動數組的方法),可以使本來N*V的空間復雜度降低V,也就是把關于第幾個物品的N去掉了(下面會解釋為什么可以這么做)

至于為什么要空間優化,首先是因為遞推本來就是用空間換時間,消耗的空間比較大,然后關于算法的競賽一般都會有空間的限制要求,最后,在找工作面試時,面試官肯定會問一些優化的問題,平時養成優化的習慣面試時也有好處

2.為什么這題可以降維

通過觀察可以發現對于普通版的01背包遞推式,f[i][...]只和f[i-1][...]有關,那么我們可以用一種占用,一種滾動的方法來循環使用數組的空間,所以這個方法叫滾動數組,對于將來肯定用不到的數據,直接滾動覆蓋即可,具體的如何滾動會放下面講

還有就是滾動數組的缺點犧牲了抹除了大量數據,不是每道題都可以用,但是在這,答案剛好是遞推的最后一步,所以直接輸出即可,遞推完后不需要調用那些已經沒了的數據,所以這題可以

下面先畫個圖理解一下滾動的大致概念

反正就是不斷覆蓋的過程

3.這題如何具體優化

下面開始具體化的分析

對于第i層,它只和第i-1層有關,但是對于剩余空間j無法優化,所以現在拿i開刀,把他砍掉,用一個長度為V(總空間)的數組來表示,然后每次相鄰的兩個i和i-1在上面一直滾動

所以現在建立一個數組f[V],一維數組大小為V

首先建立兩個復合for循環

for(i=1~n)

  for(j=v~0)

記住這里第二層循環必須是v~0而不是0~v,先記著,后面會解釋,

接下來的分析建議配合下面圖片學習

然后在循環的過程中,還是老樣子,假設我們已經循環到i=2這層了(也就是說i=1已經循環完了),然后對于i=2這一層,我們對j循環,j從v到0

假如現在j=v,我們讓f[j]=max(f[j],f[j-c[i]]+w[i])

在沒有覆蓋之前,所有的f數據都是屬于上一層也就是第一層的,我們就當作i-1層數據已經準備好了,然后把max內的拆成兩半分析,對于f[j]=f[j]就是不放的情況,那么總價值沒有改變,所以對于f[j]=f[j]就是形式上的更新數據,把i-1層的f[j],給了i-1層的f[j]...對于f[j]=f[j-c[i]]+w[i],那個w[i]是肯定要加的不用討論,然后我們觀察一下,對于下標j-c[i]是不是肯定會小于j,那么如果說j從V~0也就是從最大到最小,每次賦值處理都是從前面的格子看看數據參考,并沒有修改

再詳細點說的話就是對于f[j]=f[j-c[i]]+w[i],f[j-c[i]]是第i-1層的東西,讓j=v~0是為了讓f數組每次滾動覆蓋時都是覆蓋接下來不需要用的位置,比如說處理到第f[8]位時,假如接下來的max判定后面那種方法總價值大,然后假設c[i]=3,這時后就相當與f[8]=f[8-c[i]=5]+w[i],我們這里只是參考了f[5]的數據,并沒有改變它,因為說不定計算新一輪f[6]時又要用到舊的f[5]呢,可是我們刷新了f[8]的數字后,再j--,計算f[7],再j--,計算f[6],都不會再用到f[8]這個數據,這是由于f[j-c[i]] 中的減c[i]導致的,反之,假若我們讓j=0~v,就可能出現新數據被新數據覆蓋的結果,我們是有"底線"的,只允許新數據覆蓋舊數據

對于j,如果要處理f[j]=max(f[j],f[j-c[i]]+w[i]),就得當j>=c[i]時處理,因為如果j<c[i],那么j-c[i]為負,下標負的情況沒必要考慮,如果考慮了還可能會溢出

?其實對于max,還用另一個小東西代替,有沒有發現,如果f[j-c[i]]+w[i]>f[j],就選f[j-c[i]]+w[i],如果f[j-c[i]]+w[i]<f[j],那選f[j]和沒選一樣,所以待會的空間優化版省掉了max函數,少用一種函數

#include<bits/stdc++.h>//萬能頭文件
#define ll long long
using namespace std;
const ll maxn=100;
ll n,v,f[maxn];
ll c[maxn];//每個物品占用空間
ll w[maxn];//每個物品的價值int main()
{cin>>n>>v;for(ll i=1;i<=n;i++)scanf("%lld",&c[i]);for(ll i=1;i<=n;i++)scanf("%lld",&w[i]);for(ll i=1;i<=n;i++)//第i個物品for(ll j=v;j>=1;j--)//剩余空間j
        {if(f[j]<=f[j-c[i]]+w[i] && j-c[i]>=0 )//二維數組變一維數組f[j]=f[j-c[i]]+w[i];//如果值得改變并且j的空間還裝得下就賦新值
        }cout<<f[v]<<endl;//輸出答案

}
空間優化版01背包
點擊"+"號展開代碼,為了排版好看把代碼折疊了,為了防止有人點不開文章底部還有一份沒折疊的

三.初始化的細節

初始化有兩種,一種情況是只要求價值最大,另外一種是要求完全剛好塞滿,第一種的初始化是賦值為0,第二種的初始化是賦值為負無窮,因為沒有塞滿,所以數據實際上不存在,也就是讓不存在的數不現實化,讓與這種數相關的數據都不可用化

下面貼一些背包九講的文字

1.4 初始化的細節問題
我們看到的求最優解的背包問題題目中,事實上有兩種不太相同的問法。 有的題目要求“恰好裝滿背包”時的最優解,有的題目則并沒有要求必須把背 包裝滿。一種區別這兩種問法的實現方法是在初始化的時候有所不同。
3
如果是第一種問法,要求恰好裝滿背包,那么在初始化時除了F[0]為0,其 它F[1..V ]均設為?∞,這樣就可以保證最終得到的F[V ]是一種恰好裝滿背包的 最優解。 如果并沒有要求必須把背包裝滿,而是只希望價格盡量大,初始化時應該 將F[0..V ]全部設為0。 這是為什么呢?可以這樣理解:初始化的F數組事實上就是在沒有任何物 品可以放入背包時的合法狀態。如果要求背包恰好裝滿,那么此時只有容量 為0的背包可以在什么也不裝且價值為0的情況下被“恰好裝滿”,其它容量的 背包均沒有合法的解,屬于未定義的狀態,應該被賦值為-∞了。如果背包并非 必須被裝滿,那么任何容量的背包都有一個合法解“什么都不裝”,這個解的 價值為0,所以初始時狀態的值也就全部為0了。 這個小技巧完全可以推廣到其它類型的背包問題,后面也就不再對進行狀 態轉移之前的初始化進行講解。
初始化的細節問題-背包九講

四.常數級的優化

1.5 一個常數優化
上面偽代碼中的
for i = 1 to N for v = V to Ci
中第二重循環的下限可以改進。它可以被優化為
for i = 1 to N for v = V to max(V ?ΣN i Wi,Ci) 這個優化之所以成立的原因請讀者自己思考。(提示:使用二維的轉移方程思 考較易。)
常數級優化-背包九講

不得不說,這也太摳門了,算法效率追求到極致

?

?五.小結

01背包很重要,是后面的基礎

要學會推導狀態轉移方程與實現它

要學會去優化空間復雜度

PS:祝每個看到這里的人都能掌握01背包

?

?

接下來放一下代碼大合集

普通版代碼
#include<bits/stdc++.h>//萬能頭文件
#define ll long long
using namespace std;
const ll maxn=100;
ll n,v,f[maxn][maxn];
ll c[maxn];//每個物品占用空間
ll w[maxn];//每個物品的價值
int main()
{cin>>n>>v;for(ll i=1;i<=n;i++)scanf("%lld",&c[i]);for(ll i=1;i<=n;i++)scanf("%lld",&w[i]);for(ll i=1;i<=n;i++)//第i個物品for(ll j=v;j>=0;j--)//剩余空間j
        {if(j >= c[i])//如果裝得下f[i][j]=max( f[i-1][j-c[i]]+w[i],f[i-1][j]);else//如果裝不下f[i][j]=f[i-1][j];}cout<<f[n][v]<<endl;//輸出答案

}
空間優化版代碼
#include<bits/stdc++.h>//萬能頭文件
#define ll long long
using namespace std;
const ll maxn=100;
ll n,v,f[maxn];
ll c[maxn];//每個物品占用空間
ll w[maxn];//每個物品的價值int main()
{cin>>n>>v;for(ll i=1;i<=n;i++)scanf("%lld",&c[i]);for(ll i=1;i<=n;i++)scanf("%lld",&w[i]);for(ll i=1;i<=n;i++)//第i個物品for(ll j=v;j>=1;j--)//剩余空間j
        {if(f[j]<=f[j-c[i]]+w[i] && j-c[i]>=0 )//二維數組變一維數組f[j]=f[j-c[i]]+w[i];//如果值得改變并且j的空間還裝得下就賦新值
        }cout<<f[v]<<endl;//輸出答案

}

?

轉載于:https://www.cnblogs.com/zyacmer/p/9961710.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/281608.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/281608.shtml
英文地址,請注明出處:http://en.pswp.cn/news/281608.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux內核源碼剖析 博客,【Linux內存源碼分析】頁面遷移

頁面遷移其實是伙伴管理算法中的一部分&#xff0c;鑒于其特殊性&#xff0c;特地另行分析。它是2007年的時候&#xff0c;2.6.24內核版本開發時&#xff0c;新增碎片減少策略(the fragmentation reduction strategy)所引入的。該策略也稱之為反碎片技術(anti-gragmentation)。…

360的下一代SOC是這個樣子的

幾乎所有大型企業或機構的IT系統中&#xff0c;都會有安全運營中心(SOC)&#xff0c;它是網絡安全防護體系從設備部署到系統建設&#xff0c;再到統一管理&#xff0c;這一發展過程的自然產物。但在國內的實際應用中&#xff0c;SOC的問題多多。 首先是數據類型不全&#xff0c…

【轉載】利用scipy.misc等庫對jpg以及png等圖像數據預處理(用于深度學習喂數據)...

http://blog.csdn.net/qq_16949707/article/details/56306720 轉載于:https://www.cnblogs.com/tenderwx/p/8057599.html

2018年下半年網絡公式考試案例分析真題

閱讀以下說明&#xff0c;回答問題1至問題3&#xff0c;將解答填入答題紙對應的解答欄內。【說明】某公司網絡劃分為兩個子網&#xff0c;其中設備A是DHCP服務器&#xff0c;如圖3-1所示。 【問題1】(6分&#xff0c;每空2分)DHCP在分配IP地址時使用 (1) 的方式&#xff0c; 而…

哪一個不是linux常用的shell,Linux下查看使用的是哪種shell的方法匯總

查看當前發行版可以使用的shell復制代碼代碼如下:[rootlocalhost ~]$ cat /etc/shells/bin/sh/bin/bash/sbin/nologin查看當前使用的shell方法一、最常用的查看shell的命令&#xff0c;但不能實時反映當前shell復制代碼代碼如下:[rootlocalhost ~]$ echo $SHELL/bin/bash二、下…

企業建設呼叫中心需要考慮哪些因素

呼叫中心發展至今&#xff0c;它的意義早已不是90年代末,只是簡單地解決客戶客服系統的要求。現在的呼叫中心有了新的使命&#xff0c;比如拓展成為一個信息服務中心&#xff0c;或者成為一個營銷中心。客戶如何能通過這樣的手段&#xff0c;使企業與其他的企業之間形成差異化的…

【單片機入門】(三)應用層軟件開發的單片機學習之路-----UART串口通訊和c#交互...

本文由網友投稿。作者&#xff1a;陳顯達原文標題&#xff1a;【單片機入門】(三)應用層軟件開發的單片機學習之路-----UART串口通訊和c#交互原文鏈接&#xff1a;https://www.cnblogs.com/1996-Chinese-Chen/p/16826558.html引言在第一章博客中&#xff0c;我們講了Arduino對E…

linux中使用yum的優點,linux – 自動“yum update”以保證服務器安全 – 優點和缺點?...

這取決于根據我使用CentOS的經驗,它非常安全,因為您只使用CentOS基本存儲庫.您是否應該偶爾嘗試更新失敗…是…在您應該期望出現故障的硬盤驅動器或偶爾出現故障的CPU的同一級別上.您永遠不會有太多備份. &#x1f642;關于自動更新的好處是,您可以比手動修補更快(因此更安全).…

高能力成熟度軟件企業中軟件質量工程師的職責

隨著科學技術的不斷發展進步&#xff0c;企業之間的競爭越來越激烈。軟件企業要想在競爭中發展生存&#xff0c;提高軟件產品質量已成為必要條件。在一些高能力成熟度軟件企業中&#xff0c;專門成立了質量保證和控制職能部門&#xff0c;起著提高項目管理透明性和確保軟件產品…

存儲過程和函數的區別

存儲過程和函數的區別存儲過程和函數目的是為了 可重復地 執行操作數據庫的sql語句的集合。區別是寫法和調用上。寫法上&#xff1a;存儲過程的參數列表可以有輸入參數、輸出參數、可輸入輸出的參數&#xff1b;函數的參數列表只有輸入參數&#xff0c;并且有return <返回值…

機器學習案例丨基于廣泛和深入的推薦 - 餐廳評級預測

點擊上方藍字關注我們&#xff08;本文閱讀時間&#xff1a;18分鐘&#xff09;Microsoft Azure Machine Learning Studio 是微軟強大的機器學習平臺&#xff0c;在設計器中&#xff0c;微軟內置了15個場景案例&#xff0c;但網上似乎沒有對這15個案例深度刨析的分析資料&#…

css linux 等寬字體,比例字體等寬字體

我們都知道等寬字體和比例字體的區別&#xff0c;就在于比例字體(Monospaced Font)即每個字母寬度是按一定比例自動調整的&#xff0c;而等寬字體(Proportional font)則是固定寬度&#xff0c;固定間距&#xff0c;字體的每一個字母和字符所占的水平空間都是相同的。比例字體&a…

三星智能家居系統頻繁故障 大批用戶受到影響

Shelley Powers正在她密蘇里州郊區的房子中鼾睡&#xff0c;突然警鈴大作將她驚醒&#xff0c;在仔細排查之后&#xff0c;發現是虛驚一場&#xff0c;是安全傳感器誤報。在此之后的幾周&#xff0c;她的三星Smart Things智能家居系統頻繁出現故障&#xff0c;比如設定的燈具不…

適用于 .NET 的開源文本差異對比組件

你好&#xff0c;這里是 Dotnet 工具箱&#xff0c;定期分享 Dotnet 有趣&#xff0c;實用的工具或組件&#xff0c;希望對您有用&#xff01;簡介對于開發人員來說&#xff0c;Git 是我們經常使用的工具&#xff0c;在每次編寫完代碼并提交后&#xff0c;我們可以通過 git dif…

MySQL—查詢某時間范圍的數據

-- 查詢今天的數據 select * from user where to_days(birthday) to_days(CURDATE()); -- 查詢昨天的數據 select * from user where to_days(CURDATE()) - to_days(birthday)<1; -- 查詢最近7天的數據 select * from user where birthday > DATE_SUB(CURDATE(),INTERVA…

box-shadow陰影合集

2019獨角獸企業重金招聘Python工程師標準>>> * box-shadow可以設置6個值。其中4個可選&#xff1b;2個必須指定&#xff1a;分別是x軸偏移量和y軸偏移量&#xff0c;這2個值可以是正值&#xff0c;可以是負值&#xff0c;也可以是0&#xff0c;但不可以省略不寫 陰影…

《數據科學R語言實踐:面向計算推理與問題求解的案例研究法》一一2.5 為跨年度的個人參賽選手構造記錄...

本節書摘來自華章計算機《數據科學R語言實踐&#xff1a;面向計算推理與問題求解的案例研究法》一書中的第2章&#xff0c;第2.5節,作者&#xff1a;[美] 德博拉諾蘭&#xff08;Deborah Nolan&#xff09;  鄧肯坦普朗&#xff08;Duncan Temple Lang&#xff09;  更多章…

基于 abp 微服務架構的開源低代碼平臺

你好&#xff0c;這里是 Dotnet 工具箱&#xff0c;定期分享 Dotnet 有趣&#xff0c;實用的工具或組件&#xff0c;希望對您有用&#xff01;簡介 ABP-MicroService是 一個基于ABP vNext微服務架構、vue-element-admin的后臺管理框架&#xff0c;適用于大型分布式業務系統和企…

linux android sdk gengxinman,Android 實現增量更新

一、概述增量更新相較于全量更新的好處不言而喻&#xff0c;利用差分算法獲得1.0版本到2.0版本的差分包&#xff0c;這樣在安裝了1.0的設備上只要下載這個差分包就能夠完成由1.0-2.0的更新。比如&#xff1a;存在一個1.0版本的apkapk1.png然后需要升級到2.0版本&#xff0c;而2…

(轉)yi_meng linux 下 ifcfg-eth0 配置 以及ifconfig、ifup、ifdown區別

linux 下 ifcfg-eth0 配置 以及ifconfig、ifup、ifdown區別 原文&#xff1a;https://www.cnblogs.com/yi-meng/p/3214471.html這3個命令的用途都是啟動網絡接口&#xff0c;不過&#xff0c;ifup與ifdown僅就 /etc/sysconfig/network- scripts內的ifcfg-ethx&#xff08;x為數…