装箱问题的动态规划算法和渐进ptas
instance:给定n个物体,大小分别为s1,s2,…,sn,将其放进大小为m的箱子里
问,需要的最少的箱子的数目是多少。
可以将这个问题抽象成,给定n个物体都在0,1之间,将其放在大小为1的箱子里,球最少的数目。
1.firstfit
这个算法和内存分配算法类似。
把物体放在第一个能够放下的箱子里,如果前面的箱子都放不下,那么重开一个箱子。显然对于这种算法,有:除了最后一个箱子,其他的箱子都应该是超过半满的。否则,假设有两个箱子都没有半满,那么将这两个箱子倒在一起就行了。
so,we get:
opt>∑isi>(sol−1)2
then:
sol≤2opt
这是对于所有情况都成立的估计。
那么如果所有的箱子都很小呢?假设每个箱子都比γ小,那么只可能有一个箱子里面的东西是小于等于1−γ的,其余的所有箱子都应该比1−γ大,那么就有以下的估计:
opt≥∑isi>(1−γ)×(sol−1)
So: