动态规划-电路布线问题

                                           动态规划-电路布线问题_第1张图片

问题描述:在一块电路板的上、下2端分别有n个接线柱。根据电路设计,要求用导线(i,π(i))将上端接线柱与下端接线柱相连,如图所示。其中π(i){1,2,…,n}的一个排列。导线(i,π(i))称为该电路板上的第i条连线。对于任何1≤i<j≤n,第i条连线和第j条连线相交的充分且必要的条件是π(i)>π(j) 

电路布线问题要确定将哪些连线安排在第一层上,使得该层上有尽可能多的连线。换句话说,该问题要求确定导线集Nets={(i,π(i)),1≤i≤n}的最大不相交子集。

总结一下题干:①第i条连线和第j条连线相交要满足的条件:π(i)>π(j)

                         ②主要有这几个变量:1≤i≤n,1≤j≤n代表接线柱, π代表一种排列

主要要解决的问题:我要确定第一层怎么设计才能向上摞其他电路板,怎么摞?随便摞吗?不是的,我要考虑怎么让第一层电路板的连线最多。好,下面开始搭建数学模型:

记录N(i,j)的最大不相交子集为MNS(i,j)。Size(i,j)=|MNS(i,j)|。(Size(i,j)代表条数)

①当i等于1时,

我详细解释一下这个公式什么意思:在i等于1这种情况下,在已经存在连线π(1)的后面都可以安排线相连,但是在π(1)之前的线无法相连。

②当i大于1时,又分成三种情况:

2.1 j<π(i)时,这个时候划线的结果是前一个接线柱划线的结果(举例:N(2,7) = N (1,7),这个时候因为大于这个对应关系的线已经不需要画上了,所以对应的情况就是N(1,7)的划线情况)

即:此时,   。故在这种情况下,N(i,j)=N(i-1,j),从而Size(i,j)=Size(i-1,j)。

2.2  j≥π(i)时,

动态规划-电路布线问题_第2张图片

存在选择线和不选择线两种情况,我们只需要比较两个情况的最大值进行输出就可以了

动态规划-电路布线问题_第3张图片

最后呢,我们可以列出递推公式:

动态规划-电路布线问题_第4张图片

代码的话,可以参考一下这篇博客:https://blog.csdn.net/huangxy10/article/details/7782865

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