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