程序最优存储问题
题目描述
现要把长度为l1,l2,...,l7l_1,l_2,...,l_7l1,l2,...,l7的7个子程序放在磁带T1T1T1和T2T2T2上,并且希望按照最大检索时间取最小值的方式存放,即如果存放在T1T1T1和T2T2T2上的程序集合分别为AAA和BBB,则希望所选择的AAA和BBB使得max{∑li(i∈A),∑li(i∈B)}\max\{\sum l_i(i\in A),\sum l_i(i\in B)\}max{∑li(i∈A),∑li(i∈B)}取最小值。
现已知777个程序的长度分别为{2,14,4,16,6,5,3}\{2,14,4,16,6,5,3\}{2,14,4,16,6,5,3}。
试设计一个动态规划算法找出完成这777个程序的最优存储方式,使得最大检索时间最小。
解题思路
777个程序的长度之和为505050,因此必有一个磁带上存放的程序长度不超过⌊502⌋=25\lfloor \frac{50}{2} \rfloor=25⌊250⌋=25。
故可对这个磁带使用求解0-1背包问题的方法来求出它所能存放的最大程序长度。
求解时:
背包容量:252525
物品价值:2,14,4,16,6,5,32,14,4,16,6,5,32,14,4,16,6,5,3
物品重量:2,14,4,16,6,5,32,14,4,16,6,5,32,14,4,16,6,5,3
而在这个题中,有2+14+4+5=252+14+4+5=252+14+4+5=25,因此两个磁带可以将505050的总长度平分。最优检索时间就是252525。