这个装箱问题的问题描述类似: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
|