算法导论最后一章《近似算法》习题“装箱”问题求解

本文探讨了装箱问题的NP完全性,并介绍了NF、FF、FFD、BF和BFD等近似算法。通过将物品按大小降序、箱子按剩余空间升序排列,实现了次最优解的算法。在VS2013中已调试通过的C++源代码为解决问题提供了实操示例。
摘要由CSDN通过智能技术生成

这个装箱问题的问题描述类似:http://bbs.csdn.net/topics/300089315 或者这个问题  http://zhidao.baidu.com/question/711433274928584405.html

这个问题可以证明这是一个NP完全性的问题。所以什么贪心算法是无法求得最优解的,甚至也不适用于0-1背包问题。既然是NP问题,求解的时间复杂度应该是指数时间。所以在实际研究过程中,一般求解近似解,即近似算法。常见的算法:NF(Next Fit)近似算法,FF(First Fit)近似算法,FFD(First Fit Decreasing)近似算法,BF(best Fit),BFD(Best Fit Deceasing)等。对其简要描述可以参考这篇短文http://machqr.blog.163.com/blog/static/5020129420091131249834/

根据这篇文章的描述我们可以写出还不错的次最优算法。其核心思想就是,对物品按大小降序排列,对未满箱子按剩余空间进行升序排列。每个物品都从第一个箱子开始存放,如果都存放不了则开启新的空箱子。

以下是我在vs2013调试通过的源代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值