一文弄懂回溯法装载问题

一文弄懂回溯法装载问题

我觉得我又行了

回溯法就是深度搜索,但是为了降低搜索的复杂性,用到了剪枝函数去掉了不必要搜索的结点,剪枝函数有两种,一个是约束函数,一个是限界函数。约束函数就是一些约束条件,限界函数就是限制界限即不能产生最优解的函数。

问题描述

有一批共n个集装箱要装上2艘载重量分别为C1和C2的轮船,其中集装
箱i的重量为wi,且∑wi≤C1+C2
装载问题要求确定是否有一个合理的装载方案可将这个集装箱装上这2
艘轮船。如果有,找出一种装载方案。

容易证明,如果一个给定装载问题有解,则采用下面的策略可得到最优装载方案:
(1)首先将第一艘轮船尽可能装满;
(2)将剩余的集装箱装上第二艘轮船。
只需要解决1,2就是确定的了

分析

问题变量
int n; //集装箱个数
int w[100]; //集装箱重量数组
int c; //船的载重量
参数:结点层数t
子集树结点相关数据
int cw; //当前装入集装箱重量
int r; //剩余集装箱的重量
int x[100]; //解向量
记录最优值和最优解的变量
int bestw; //当前最优值
int bestx[100]; //当前最优解

对于每一个集装箱都有两种可能,装或者不装,因为是回溯,所以肯定要遍历所有情况,为了简化复杂度,就需要用到上面说的剪枝函数
约束函数:当该结点放入集装箱,需要考虑当前的重量加上它的重量是否小于等于总载重量,如果是放入,然后以它为扩展结点往下一层扩展。

if (cw + w[i] <= c) //搜索左子树,约束函数
{ x[i] = 1; //第i个集装箱装船
cw += w[i];
backtrack(i + 1); //继续搜索i+1层
cw -= w[i]; }

限界函数:当该结点没有放入集装箱,注意它已经没放入了,所以剩余的重量和放入一样都是之前剩余重量减去当前重量,所以在每次检索的开头都要将剩余重量减去当前重量,最后再加回来。再说回来,如果没加入,需要判当前总重量加上剩余的总重量是否大于当前的最优重量,如果大于,则有可能有更好的解,要不然没有意义,因为哪怕全加入也不会超过当前最优解。
每次更新当前当前剩余重量,不管加不加入都需要减去当前结点重量,最后再补回来
if (cw + r > bestw)
{ x[i] = 0; // 搜索右子树,限界函数
backtrack(i + 1); }

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
张正友标定是一种常用的相机标定方,广泛应用于计算机视觉领域。该方通过采集一系列已知的三维物体在相机坐标系下的二维投影点,来计算相机内外参数矩阵,从而实现相机的几何校正和测量。 具体步骤如下: 1. 初始化标定板:选择一个特定的标定板,例如棋盘格,然后在每个方格的交叉点上贴上黑白相间的标志。 2. 放置标定板:将标定板放置在计算机视觉系统所见范围内,保证标定板能够在不同角度、位置下被相机观察到。 3. 拍摄标定图像:使用相机对标定板进行拍摄,至少需要12-20幅图像,图像应该包含不同的姿态和视角。 4. 检测标志物:从每个标定图像中提取特征点,通常使用角点检测算来检测标志物的位置。 5. 计算相机参数:根据提取的特征点,通过最小二乘来计算相机的内部参数(焦距、主点坐标)和外部参数(旋转矩阵、平移向量)。 6. 优化结果:根据计算得到的相机参数,利用优化算来进一步提高标定的精度。 7. 验证标定结果:使用标定结果对图像进行校正,并测量标定板上的特征点,通过计算误差指标来验证标定结果的准确性。 总之,张正友标定通过采集已知物体在相机坐标系下的二维投影点,实现了相机参数的计算和校正,对于计算机视觉中的三维重建、目标检测等任务具有重要意义。掌握这种标定方可以帮助我们更好地理解相机成像过程,提高图像处理和计算机视觉算的精度和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值