在一塊電路板的上下兩端分別有 n 個接線柱。根據電路設計,用(i,π(i))表示將上端接線
柱 i 與下端接線柱π(i)相連,稱其為該電路板上的第 i 條連線。如圖 4-1 所示的π(i)排列為
。對於任何 1≤i,i《j≤n,第 i 條連線和第 j 條連線相交的充要條件是π(i)>π(j)。
(《就是
在製作電路板時,要求將這 n 條連線分布到若干絕緣層上,在同一層上的連線不相交。
現在要確定將哪些連線安排在一層上,使得該層上有盡可能多的連線,即確定連線集
nets=的最大不相交子集。
【分析問題】
記 n(i,j)=。n(i,j)的最大不相交子集為 mns(i,j) ,
size(i,j)=|mns(i,j)|
經分析,該問題具有最優子結構性質。對規模為 n 的電路佈線問題,可以構造如下遞
歸式:
c **】
下面是演算法的 c 語言實現。
(1)變數說明
size[i][j]:上下端分別有 i 個和 j 個接線柱的電路板的第一層最大不相交連線數
pi[i]: π(i),下標從 1 開始
(2)c 程式
#include "stdlib.h"
#include
#define n 10 /*問題規模*/
int m=0; /*牢記錄最大連線集合中的接線柱*/
void maxnum(int pi,int size[n+1][n+1],int n)
}/*最大連線數 */
size[n][n]=size[n-l][n]>=size[n-l][pi[n]-l]+1 ? size[n-l][n]:size[n-l][pi[n]-l]+l;
}/*構造最大不相交連線集合,net[i]表示最大不相交子集中第 i 條連線的上端接線柱的序號
*/void constructset(int pi,int size[n+1][n+1],int n,int net[n])
}if(j>=pi[l]) net[m++]=l; /*當 i=1 時*/
}
【問題 1】(6 分)
根據以上說明和 c **,填充 c **中的空(1)~(3)。
【問題 2】(6 分)
根據題幹說明和以上 c **,演算法採用了 (4) 演算法設計策略。
函式 maxnum 和 constructset 的時間複雜度分別為 (5) 和 (6) (用 o 表示)。
【問題 3】(3 分)
若連線排列為,即如圖 4-1 所示,則最大不相交連線數為
(7) ,包含的連線為 (8) (用(i,π(i))的形式給出)
解析:
第(1)——(3)問:根據公式來推出:
第(4)問:看公式和題目中提示具有最優子結構性質推出了是動態規劃
第(5)(6)問:首先看,有沒有巢狀for,巢狀for的使用乘法關係。再看,看for迴圈的次數迴圈。
第(7)(8)問:重點解析題意,更加動態規劃的演算法得出:
首先根據題意知道,我們有兩種情況。
第一種情況,i=1的時候,當有第一條連線線的時候,如果第二條接線(j)小於pi的值,相交,為0。如果第二條接線(j)大於等於pi的值,不相交,為1。
注意為**空的部分就是為0的部分。
第二種情況:i>1的時候(即i=2,3,4,5,……,10),如果下一條連線線(j)比p[i]小的話,不想交,不相交數為size(i-1,j)。其他情況,不相交數為max。
這個情況就是動態規劃的核心,就是在透露,當條件連線數不斷增加的時候,我們怎麼看找出這些不相交連線數,所以你只需要看兩個地方:
(1)找不相交數的順序:題目中給出了:1《i《j《=n,就是說明第i條連線數的右側我們就可以忽略
(2)根據什麼條件去找,題目中提示我們的相交條件是pi[i]>pi[j],得出不相交的條件是pi[i]《pi[j],所以我們可以找第i條連線數的右側中,如果有誰的pi值是大於pi[i]的,就相交,size值加1,如不相交,size值還是不變。
綜合**:
其他方法:
不用公式,直接看圖找出的情況:
2023年上半年軟考總結
終於2016年上半年軟考考完了。說實在的,感覺蠻驚險的,我估計很多人出了考場都跟我乙個感覺,腫麼這麼難。當然還有很多收穫。上半年和下半年感覺差很多,如果下半年一本 一本通 就能搞定的話,上半年就得詳細的分析課本,及時的總結。不行你就瀏覽目錄,要不利用強大的網路,請有在希賽考綱分析的要乙份來。今年考試...
2023年的規劃
馬上2016年的第一天就要過去了。為了在第一天寫下新一年的規劃,所以得趕緊了。一 關於工作 技術 現在切入到大資料方向來,雖然不能和幾年前的人一樣有種拓荒的豪邁,但是還是可以大有所為的,可以站在巨人的肩上,繼續向前。分布式計算 大資料,不管是理論還是產品實現,都有非常多。比如分布式儲存系統,就有各種...
2023年總結,2023年規劃
距離2017年還有2小時不到,其實一直想寫總結了.無奈一直作罷,主要原因是不知道如何說起,每次看到2016年規劃,心生慚愧.逃避終究不是辦法,直面人生吧.說說今年發生的主要事件吧 a.6月換了工作.現在小公司的生存很困難,我曾經信誓旦旦做好了長期在上家外包公司奉獻的準備,無奈今年專案特別少,幾乎沒有...