问题描述:
n个集装箱要装上一艘重量为W的轮船,重量用数组w【】表示。不考虑体积限制,先要从这些集装箱中选出重量和小于等于W并且尽可能大的若干装上船。
求解:
货物的选择会构成一颗完全二叉树,左孩子对应选择当前物品,右孩子对应不选择。父节点的值对应当前选择下总的重量,如图。(这里只画了一部分)

但如果单纯的对二叉树进行深度递归搜索,那么时间复杂度是很大的,为2^n。
我们可以加上一些剪枝函数,来有效的缩小时间复杂度。
增加变量rw,来记录剩下物品的总的重量和。
走左孩子的前提只要加上该孩子的重量之后<=W就可继续往下走,否则直接剪枝。
走右孩子的前提是当前已有重量tw+没选物品总重量rw-想选的物品重量>maxw,就可以继续往下走,该式子的含义是即使不选该物品,剩下的物品重量仍存在超过maxw的可能,否者直接剪枝。如图。

本文探讨了如何从一组集装箱中选取总重量最接近但不超过特定值的组合,通过构建完全二叉树并运用剪枝技巧减少搜索空间,有效提高了算法效率。
最低0.47元/天 解锁文章

5891

被折叠的 条评论
为什么被折叠?



