1. 问题
给定n个圆的半径序列,将它们放到矩形框中,各圆与矩形底边相切,求具有最小排列长度的圆排列。
2. 解析
解为<i1,i2,…,in>为1,2,…,n的排列,解空间为排列树
部分解向量<i1,i2,…,ik>:表示前k个圆已排好。令B={i1,i2,…,ik},下一个圆选择ik+1.
约束条件:ik+1∈{1,2,…,n}-B
界:当前得到的最小圆排列长度。
代价函数符号说明
k:算法完成第k步,已经选择了第1-k个圆
rk:第k个圆的半径
dk:第k-1个圆到第k个圆的圆心水平距离,k>1
xk:第k个圆的圆心坐标,规定x1=0
lk:第1-k个圆的排列长度
Lk:放好1-k个圆以后,对应结点的代价函数值
Lk<=λk
计算过程
R={1,1,2,2,3,5}
取排列<1,2,3,4,5,6>
半径排列为1,1,2,2,3,5,结果见下表和下图
k | rk | dk | xk | lk | Lk |
---|---|---|---|---|---|
1</ |