电子科技大学算法设计作业解析:贪心与动态规划

3星 · 超过75%的资源 需积分: 13 11 下载量 62 浏览量 更新于2024-09-09 收藏 124KB DOC 举报
“电子科技大学李洪伟算法设计作业及答案,涉及算法设计与分析课程的作业解答,包括排序问题和找零硬币问题。” 在电子科技大学的算法设计课程中,李洪伟老师的作业涵盖了一些核心的算法概念。第一部分作业是关于函数渐进增长速率的排列,这是对算法复杂度分析的基础。题目要求按照增长速率从小到大的顺序排列以下五个函数: 1. f1(n) = O(n^2.5) 2. f2(n) = 2 * log(n) * 2 * log(log(n)) = O(n * log(n)) 3. f3(n) = O(n^1.75) 4. f4(n) = 2^2^n = 4^n = O(4^n) 5. f5(n) = 3^n = O(3^n) 根据大O记号表示的渐进上界,可以得出: - f2(n) = O(n * log(n)) < f3(n) = O(n^1.75) - f3(n) = O(n^1.75) < f1(n) = O(n^2.5) - f1(n) = O(n^2.5) < f5(n) = O(3^n) - f5(n) = O(3^n) < f4(n) = O(4^n) 因此,正确的顺序是:f2 < f3 < f1 < f5 < f4。 第二部分作业是一个找零硬币问题,目标是设计一种方法用最少的硬币支付任意金额。这个问题涉及到两种常见的算法策略:贪心算法和动态规划。 1. **贪心算法**:在这种方法中,我们每次选择面值最大的硬币,只要它不超过剩余需要支付的金额。算法终止于无法再找到合适的硬币或金额变为0。虽然这种方法直观且易于实现,但它并不保证总是能找到最优解。例如,当硬币面值为3、5和9时,使用贪心算法无法找到支付10元的最小硬币组合。 2. **动态规划**:动态规划方法通过构建一个二维数组result和record来记录每种面值硬币在不同金额下的最少硬币数量。对于每个硬币种类i和金额j,计算不使用当前面值i或使用1个、多个i面值硬币的最小数量。这种方法可以确保找到全局最优解,但计算量较大。 在这个具体案例中,两种方法都能解决找零问题,但动态规划可以保证找到最少硬币数量,而贪心算法则可能不是最优的。在实际应用中,我们需要根据问题的具体情况和性能需求来选择合适的方法。