实验报告的标题为“贪心算法实验报告1”,主要探讨了贪心算法在背包问题和哈夫曼编码问题上的应用。贪心算法是一种解决问题的方法,它每次做出局部最优选择,期望这些局部最优的选择能导致全局最优解。在这个实验中,贪心算法被用来解决两类背包问题和构建哈夫曼树。
实验涉及的是背包问题,分为分数背包问题和01背包问题。在分数背包问题中,物品可以被分割,因此我们可以对物品的价值重量比进行排序,选取比值最大的物品优先放入背包,直到背包无法再装下任何物品。在01背包问题中,物品不能分割,所以我们直接按价值排序,优先选择价值最高的物品。实验代码“背包问题.py”用于实现这两个问题的求解。
接着,实验转向了哈夫曼编码问题。哈夫曼编码是一种高效的无损数据压缩方法,通过构建哈夫曼树来生成编码。在Python中,树的结构用`tree = ['', [], []]`表示。实验过程描述了自底向上的构造方法:从字符频率表𝐴中选取频率最小的两个字符,结合它们生成一个新的子树,新子树的根节点频率是两字符的频率之和。重复此过程,直到只剩下一个字符,形成的树就是哈夫曼树。运行“哈夫曼编码问题.py”可以得到哈夫曼编码的结果。
实验还提到了动态规划方法解决01背包问题。动态规划通过构建一个二维数组𝑚[𝑖][𝑗]来存储前𝑖个物品在容量为𝑗的背包中能获得的最大价值。通过递推公式计算每个𝑚[𝑖][𝑗]的值,最终得到𝑚[𝑛][𝑀],即背包的最大价值。实验代码“动态规划.py”实现了这一过程。
这个实验报告详细介绍了贪心算法如何应用于背包问题和哈夫曼编码,同时对比了贪心算法与动态规划在解决01背包问题上的差异。通过实际编程,学生们能够深入理解这两种算法的工作原理,并观察到它们在不同问题上的表现。