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

来源 :光盘技术 | 被引量 : 0次 | 上传用户:oicq35952268
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要:常用的解决电路布线问题的算法的时间和空间的复杂度都是O(n2)。这里n为一块电路板的上端(或下端)接线柱的个数。现给出一种时间复杂度为O(nlogn)的新算法。相对传统的算法来说,此算法是一种快速算法,提高了算法运行速度。
  关键词:算法;电路布线;堆的数据结构
  中图分类号:TP301.6 文献标识码:A
  
  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)
  Key words: algorithm;circuit wiring;construction of data for heap
  
  在一块电路板的上下两端分别有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))。则用动态规划方法求解的递推公式如下:
  当i=1时:Size(1,j)=0 (j< a ); Size(1,j)=1 (j≥a1)
  当i>1时:Size(i,j)=Size(i-1,j)(j  据此可设计解电路布线问题的动态规划算法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;j  size[1][j]=0;
  for (int j=c[1];j<=n;j++
  size[1][j]=1;
  for (int i=2;i  {
   for (int j=0;j   size[i][j]=size[i-1][j];
  for (int j=c[i];j<=n;j++)
  size[i][j]=Math.max(size[i-1][j], size[i-1][c[i]-1]+1);
  }
  size[n][n]=Math.max(size[n-1][n], size[n-1][c[n]-1]+1);
  }
  Public static int traceback(int []c, int [][]size,int []net)
  {
   int n=c.length-1;
   int j=n;
   int m=0;
   for (int i=n;i>1;i--)
  if (size[i][j]!=size[i-1][j])
  {
   net[m++]=i;
   j=c[i]-1;
  }
   if (j>c[1])
   net[m++]=1;
  return m;//m为电路连线最大条数;
  }
  算法mnset显然需要O(n2)计算时间和O(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≤lj≤j, (li,lj)∈M)(公式(1))。
  在新算法中用到了[4]中的算法1,需要按行来计算M的集合。同时应用公式(1)来计算每个M中T[i,j]也有效的应用了[4]中两个定理。
  定理1.[4]设(i,j)∈M,那么对所有的i′>i,j′>j可推出T[i′,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≤q≤n).
  依照上面两个定理我们用[3]中的数据结构里的有界堆(Boundedheap)来对堆进行以下操作:
  插入操作Insert(H,Pos,Value,Data),把Pos点的值插入到有界堆H中。
  添加操作IncreaseValue(H,Pos,Value,Data),如果堆H中没有包含Pos点的值,执行上面的插入操作,否则,在此位置放入最大值max,max={max,max′},max′为先前的最大值,此操作之后更新当前的最大值。
  求界堆的最大值操作BoundedMax(H,Pos).返回H中的最大的那个数据的值,且堆中的所有数据的位置小于返回数据的当前位置。如果H堆中没有任何数据的位置小于当前数据的位置,返回0值。
  新算法的推理过程如下。首先按行执行操作,同时解决两个界堆的数据结构。当考虑第i行时,已经有界堆Hi-1的数据结构,来构造Hi的数据结构。
  第一步,Hi初始化为Hi-1。设配对点(i,j)∈M,1≤j≤n,Mi={(i,j)| (i,j)∈M,1<=j<=n}.
  第二步,按公式(2)、(3)计算T[i,j]. T[i,j].Value=BoundedMax(Hi-j,j).Value+1(公式(2))
  T[i,j].Prev=BoundedMax(Hi-j,j).data(公式(3))。
  第三步,执行添加操作:IncreaseValue(Hi,j,T[i,j].Value,(i,j)) (公式(4)).
  由定理1和定理2可以验证以上步骤的正确性。一旦算出第j列新配对点T-Value值,就不用管第j列以前的配对点。因此在计算第i行的T[i,j]时,就把此值插入到堆Hi中,是为更新下一行的新值做准备。比如说,用堆Hi-1来计算第i行的配对点处的T-Value值且更新堆Hi。接着用Hi准备下行第i+1行的计算。具体新算法的实现代码如下:
  Construct the set M using Algorithm 1 of [4].
  Let M ={(i,j)| (i,j)∈M,1<=j<=n}.
  globalLCS.Instance=∈
  globalLCS.Value=∈
  H0=∈//开始堆为空
  for i=1 to n do//按行对Mi进行操作
  Hi=Hi-1
  for each(i,j)∈Mi do //对Mi中元素按从左向右执行
  maxresult = BoundedMax(Hi-1,j)
  T[i,j].Value = maxresult.Value+1
  T[i,j].Prev = maxresult.Instance
  if globalLCS.Value < T[i,j].Value then
   globalLCS.Value = T[i,j].Value
   globalLCS.Instance = (i.j)
  end if
  IncreaseValue(H ,j, T[i,j].Value,(i,j)).
  end for
  DeleteHi-1
  end for
  return globalCLS//返回堆链中最长那条链的长度即为所求连线的最多条数
  此算法复杂度显然是O(nlogn),n为上(或下)接线柱序列的长度。
  
  3 结束语
  
  本论文所写的电路布线问题的算法是针对传统算法复杂度较高的情况下,对其算法作出改进,采用堆的数据结构解决此问题,从而提高了算法的运行速度。
  
  参考文献:
  [1]王晓东.算法设计与分析[M].北京:清华大学出版社,2008.
   [2]Costas S.Iliopouslos,M.Sohel Rahman.New efficient algorithms for the lcs and constrained lcs problems,England,UK.Information processing letters.106(2008)13-18.
  [3]G.S. Brodal, K.Kaligosi, I. Katriel, M. Kutz, Faster algorithms for computing longest common increasing subsequences, in:M.Lewenstein, G.Valiente(Eds.) ,Annual Symposium on Combinatorial Pattern Matching(CPM), In: Lecture Notes in Computer Science,vol.4009,Springer,2006.330-341.
  [4]M.S.Rahman, C.S. Iliopoulos,Algorithms for computing variants of the longest common subsequence.
其他文献
改进传统四磁极传感器磁测方式,设计基于逆磁致伸缩效应用于钢板内应力在线检测的原理验证试验系统,研制在线动态检测的励磁模块和快速信号处理系统,在实验室完成验证和研究磁测
在煤炭宽带网中,对不同xDSL用户的拨入网络设备,论文根据PPPoE、Web、802.1X三种认证方式的特点,从技术、经营、管理、服务及安全等方面对其可行性、稳定性做了分析和探讨,并
近日,河南省新闻出版局组织有关专家,对河南省107家自然科学期刊社出版的200多本杂志进行了综合质量检测,共评出了《光盘技术》杂志等54种期刊为“河南省首届自然科学一级期刊”
采用Berkovich压头,在纳米压痕仪上对K9光学玻璃进行了变切深纳米刻划试验。为探究摩擦因数与脆塑转变的深度,基于非线性最小二乘法对法向力、切向力关于刻划深度进行了拟合,
介绍EWB软件的特点,并通过实例探讨EWB软件在电子技术基础教学中的应用。
通过ZnCl2与NH4SCN和二乙烯三胺(DIEN)在水溶液中自组装,制备出了单核配合物Zn(DIEN)(SCN)2,并通过X射线衍射测定了其晶体结构.结果表明,该晶体属于正交晶系,空间群为Cmc2(1),晶胞参数为:n=8
根据由车钩缓冲器和心盘组成的铁路货车纵向受力特点,利用Matlab软件建立铁路货车调车冲击的动力学模型,分别研究不同轴重车型、不同刚度阻尼、不同制动阻力状态及不同冲击模式对车辆纵向冲击特性的影响。结果表明,随着我国铁路货车轴重的增大,车钩连挂处、车体与转向架连接处承受的纵向惯性力也随之增大。阻抗特性呈凸型的缓冲器能吸收更多的车辆冲击能量,可适应更大的调车冲击需求。较小的车体底架结构刚度及车体与转向
本文从软、硬件两方面详细阐述一个基于SPCE061A单片机的多通道数据采集器的设计过程。
对固相萃取——HPLC—PDA法测定猪肉中的盐酸克伦特罗的前处理方法和色谱条件进行了优化。超声提取时间30min,固相萃取柱净化过柱速度为2d/s。色谱条件为V甲醇:V0.01mool/L磷酸
本装置涉及一种卫星信号接收参数教学仪器。主要涉及高职学生《高频电子线路》、《通信原理》课程的学习开发设计出来的一种显示卫星信号接收参数的便携式教学仪器。本装置解