电路布线问题的一种快速算法.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
电路布线问题的一种快速算法 One Fast Algorithm for the Circuit Wiring Question ZHANG Li-xiang1,ZHAO Xue-feng1,WANG Yu2 (1. the North West Normal University,GanSu LanZhou 730070; 2. Pingliang Maternal and Child Health Hospital, Gansu Pingliang 744000) 在一块电路板的上下两端分别有 n 个接线柱。根据电路设 计,要求用导线( i , j )将上端接线柱 i 和下端接线柱 j 相连, 如图1所示。其中X=〈 1,2,…n〉的一个排列,Y==〈 1,2,…n〉 的一个排列。导线( X,Y )称为电路板上的连线。因为上接线术 是个递增的序列, 要使电路连线不相交的充分必要条件是与连线 对应的下接线柱形成的新序列必须是递增序列时才满足。 在制作 电路板时, 要求将这 n 条连线分布到若干绝缘层上, 在同一层上 的连线不相交。电路布线问题要确定哪些连线安排在第一层上, 使得该层上有尽可能多的连线。 即该问题要求确定导线连线的最 大不相交的条数。 图 1 电路布线实例 1 用动态规划方法求解电路布线问题 设 Size[i][j] 为下端接线柱不超过 j ,上端接线柱不超过 i 的最大不相交集中边数 ( 电路布线问题的最优值为 Size(n,n)) 。 则用动态规划方法求解的递推公式如下: 据此可设计解电路布线问题的动态规划算法 mnset 如下。其中用 二维数组单元 size[i][j] 表示函数 Size(i,j) 的值。由算法 traceback 构造出最优解 MNS(n,n) ,用数组 net[0:m-1] 存储 MNS(n,n)中的m条连线。用JAVA实现的程序代码如下: Public static void mnset(int []c, int [][]size) { int n=c.length-1; for (int j=0;j1;i--) if (size[i][j]!=size[i-1][j]) { net[m++]=i; j=c[i]-1; } if (jc[1]) net[m++]=1; return m;//m 为电路连线最大条数; } 算法mnset显然需要0(n2)计算时间和0(n2)空间。算法 traceback 需要 O(n) 计算时间。 2 用堆的数据结构求解电路布线问题 新算法采用了一种有趣的数据结构(堆的数据结构 [3] )结 合[4]中的技术来解决电路布线问题,该算法也是解决LCS问题 的一种有效算法.如图2所示针对图1的实例来说明。M为配对 点的集合, (i,j) 为配对点在结构图中的位置( i 为表的行, j 为 表的列)。 图2电路布线的配对点的结构图 M(针对图1的实例) 从图2可以看出每个配对点(i,j) €M是电路的连线,要使 电路同层连线最多(不相交),必须是堆结构中的配对点的行列 同时递增, 才能前后相连形成最长的堆链。 最长堆链的长度等于 同层电路连线的最多条数,其堆链上的各个配对点 (i,j )表示电 路的各条连线。 由图 2的实例中可以验证新算法的正确性。 图中 最长堆链长度为 5恰等于该电路同层的最多连线 5条, 5 条连线 分别为( 1,2)(2,4)(3,5)(4,7)(7,8)或(1,2)(2,4) (3,5)(6,6)(7,8 )。 按照动态规划的方法求解 T[i,j] (见[4]. ), 依照下面公式 (1). 当(i,j) € M, T[i,j] 没有定义;当 i=1 或 j=1 时,T[i,j]=1; 当 i,j 工1 且(i,j) €M 时,T[i,j]=1+max{ T(li,lj)}(1 li i,1 Ij j, (li,lj) € M) (公式 (1) )。 在新算法中用到了 [4]中的算法1,需要按行来计算 M的集 合。同时应用公式(1)来计算每个M中T[i,j]也有效的应用了 [4] 中两个定理。 定理1.[4]设(i,j) € M,那么对所有的i‘ i,j j可推出 T[「,j] T[i,j],T[i,j ] T [i,j]. 定理 2.[4]要计算出 T[i,j]( (i,j) € M,1 i,j n)是独立 于任何 T[i,q]( (i,q) € M,1 qw n). 依照上面两个定理我们用 [3] 中的数据结构里的有界堆 (Boundedheap)来对堆进行以下操作: 插入操作Insert(H,Pos,Value,Data), 把Pos点的值插入到 有界堆H中。 添加操作 IncreaseValue(H,Pos,

文档评论(0)

youbika + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档