算法第四章上机实践报告
1.实践题目
程序存储问题
2.问题描述
题目要求确定n 个程序在给定长度的磁带上的一个存储方案, 使得能够在磁带上存储尽可能多的程序。
3.算法描述
贪心策略:选择可选的程序中长度最小的那个
贪心选择性质:
最优子结构性质:
1 import java.util.Arrays; 2 import java.util.Scanner; 3 4 public class ProgramStorage { 5 public static void main(String[] args) { 6 Scanner input = new Scanner(System.in); 7 int n = input.nextInt(); 8 int L = input.nextInt(); 9 int[] length = new int[n]; 10 for (int i = 0; i < n; i++) { 11 length[i] = input.nextInt(); 12 } 13 Arrays.sort(length); 14 int temp = 0, count = 0; 15 for (int i = 0; i < n; i++) { 16 if ((length[i] + temp) <= L){ 17 temp += length[i]; 18 count++; 19 } 20 } 21 System.out.print(count); 22 } 23 }
4.算法时间及空间复杂度分析
时间复杂度:将数组从小到大进行排序,故时间复杂度为O(nlogn)。
空间复杂度:算法中运用到长度为1的一维数组来存储程序长度,故空间复杂度为O(n)。
5.心得体会
贪心算法最关键的就是针对问题作出最佳选择,虽然这次实践做的题都比较困难、不太容易做出来,但经过这次实践,我对贪心算法有了更深入的理解,因此在掌握书本上的内容后,要多做题,以达到熟练掌握贪心算法的目标。