算法分析-动态规划电路布线问题

一、问题描述
\quad \quad 在一块电路板的上、下两端分别有 n n n 个接线柱。根据电路设计,要求用导线 ( i , π ( i ) ) (i,π(i)) (i,π(i)) 将上端接线柱 i i i 与下端接线柱 π ( i ) π(i) π(i) 相连。如下图所示,其中, π ( i ) , 1 ≤ i ≤ n π(i),1≤ i ≤n π(i),1in, 是{1,2,…,n}的一个排列。导线 ( I , π ( i ) ) (I, π(i)) (I,π(i)) 称为该电路板上的第 i i i 条连线。对于任何 1 ≤ i ≤ j ≤ n 1 ≤ i ≤ j ≤n 1ijn, 第i条连线和第j条连线相交的充要条件是 π ( i ) > π ( j ) π(i)> π(j) π(i)>π(j).
算法分析-动态规划电路布线问题_第1张图片
π ( i ) = { 8 , 7 , 4 , 2 , 5 , 1 , 9 , 3 , 10 , 6 } π(i)={8,7,4,2,5,1,9,3,10,6} πi=87425193106 \quad \quad 在制作电路板时,要求将这 n n n 条连线分布到若干绝缘层上。在同一层上的连线不相交。电路布线问题要确定将哪些连线安排在第一层上,使得该层上有尽可能多的连线。换句话说,该问题要求确定导线集 N e t s = { ( i , π ( i ) ) , 1 ≤ i ≤ n } Nets = {(i,π(i)),1 ≤ i ≤ n \} Nets=(iπ(i))1in} 的最大不相交子集。
1)同一层电路布线可以如下
算法分析-动态规划电路布线问题_第2张图片
2)同一层电路布线不可能如下
算法分析-动态规划电路布线问题_第3张图片
二、最优子结构性质
\quad \quad N ( i , j ) = { t ∣ ( t , π ( t ) ) ∈ N e t s , t ≤ i , π ( t ) ≤ j } N(i,j) = \{t|(t,π(t))∈Nets,t \leq i,π(t) \leq j\} N(i,j)={t(t,π(t))Netsti,π(t)j} N ( i , j ) N(i,j) N(i,j)的最大不相交子集为 M N S ( i , j ) MNS(i,j) MNS(i,j) S i z e ( i , j ) = ∣ M N S ( i , j ) ∣ Size(i,j) = | MNS(i,j)| Size(i,j)=MNS(i,j)

(1) 当 i = 1 i = 1 i=1,
M N S ( 1 , j ) = N ( 1 , j ) = { 0 , j < π ( 1 ) 1 , j ≥ π ( 1 ) MNS(1,j)=N(1,j) = \begin{cases} 0 ,j < π(1) \\ 1 ,j \geq π(1) \end{cases} MNS(1,j)=N(1,j)={0,j<π(1)1,jπ(1)

(2) 当 i > 1 i > 1 i>1时,
1) j < π ( i ) j < π(i) j<π(i) 时, ( i , π ( i ) ) ∉ N ( i , j ) (i, π(i)) \notin N(i,j) (i,π(i))/N(i,j),在这种情况下, N ( i , j ) = N ( i − 1 , j ) N(i,j) = N(i-1,j) N(i,j)=N(i1,j), 从而 S i z e ( i , j ) = S i z e ( i − 1 , j ) Size(i,j) = Size(i-1,j) Size(i,j)=Size(i1,j)
2) j ≥ π ( i ) j \geq π(i) jπ(i),此时,若 ( i , π ( i ) ) ∈ N ( i , j ) (i, π(i)) \in N(i,j) (i,π(i))N(i,j),则对于任意的 ( t , π ( t ) ) ∈ M N S ( i , j ) (t, π(t)) \in MNS(i,j) (t,π(t))MNS(i,j),有 t < i t<i t<i π ( t ) < π ( i ) π(t)<π(i) π(t)<π(i),否则, ( i , π ( i ) ) (i, π(i)) (i,π(i)) ( t , π ( t ) ) (t, π(t)) (t,π(t)) 相交。在这种情况下 M N S ( i , j ) − { ( i , π ( i ) ) } MNS(i,j)-\{(i,π(i)) \} MNS(i,j){(i,π(i))} N ( i − 1 , π ( i ) − 1 ) N(i-1,π(i)-1) N(i1,π(i)1) 的最大不相交子集。

三、递归计数最优值
电路布线的最优值 S i z e ( n , n ) Size(n,n) Size(n,n),由该问题的最优子结构性质可知:
(1) 当 i = 1 i = 1 i=1,
S i z e ( 1 , j ) = { 0 , j < π ( 1 ) 1 , j ≥ π ( 1 ) Size(1,j) = \begin{cases} 0 ,j < π(1) \\ 1 ,j \geq π(1) \end{cases} Size(1,j)={0,j<π(1)1,jπ(1)
(2) 当 i > 1 i > 1 i>1 时,
S i z e ( i , j ) = { S i z e ( i − 1 , j ) , j < π ( i ) m a x { S i z e ( i − 1 , j ) , S i z e ( i − 1 , π ( i ) ) + 1 } , j ≥ π ( i ) Size(i,j)=\begin{cases} Size(i-1,j),j < π(i) \\ max\{ Size(i-1,j) , Size(i-1,π(i))+1\},j \geq π(i) \end{cases} Size(i,j)={Size(i1,j),j<π(i)max{Size(i1,j),Size(i1,π(i))+1},jπ(i)
四、自顶向下计算最优值
算法分析-动态规划电路布线问题_第4张图片
在斜角值改变时可以取得所求的子集。即(9,10),(7,9),(5,5)(3,4)

你可能感兴趣的:(python,算法分析与设计)