目录
基本思想:贪心算法首先设计某种贪心选择策略,第一步做出当前状态的最优选择;然后问题会被演化与原问题相同但是规模更小的子问题;最后用相同的贪心选择策略求解子问题。
(1) 背包问题
(2) 带时限的作业排序问题
已知一个载重为M的背包和n件物品,第i件物品的重量为wi。如果将第i件物品的全部装入背包,收益为pi,其中wi>0, pi>0, 0<=i 设有⼀个单机系统、⽆其它资源限制且每个作业运⾏相等时间,假定每个作业运⾏1个单位时间。现有n(0 主要包括算法设计思路,详细设计、调试分析、运行结果以及算法的时间复杂度分析等。 (1)背包问题 根据每个物品的单位质量价格,优先放入当前剩余物品中单位质量价格最大的物品,直到将背包装满。 (2)带时限的作业排序问题 根据当前时钟的大小依次选取时限大于当前时钟且收益最大的作业执行。当若干作业的时限仅比当前时钟大一个单位时选取这些作业中收益最大的作业。当若干作业的时限远大于当前时钟则顺次执行这些作业。 (1)背包问题 Step 1在输入每个物品属性的同时计算每个物品的单位质量价值; Step 2将物品按照物品的单位质量价值从大到小排序; Step 3依次将当前剩余物品中单位质量价值最大物品最大限量地放入背包,并记录每件物品被装入了整件物品的多少部分,直到背包被装满。 (2)带时限作业的排序问题 Step 1将作业优先按照时限从小到大排序,时限相同则按照收益从大到小排序; Step 2依次访问作业数组,根据当前时钟判断可选取的作业; Step 3直到将作业数组完全访问一遍。 (1)背包问题 (2)带时限作业的排序问题 (1)背包问题: 测试样例1 输入 20 3 0 25 18 1 24 15 2 15 10 输出 0.00 1.00 0.50 31.50 测试样例2 输入 30 5 0 25 18 1 24 15 2 15 10 3 10 10 4 36 5 输出 0.00 1.00 1.00 0.00 1.00 75.00 (2)带时限作业的排序问题: 测试样例1 输入 4 1 100 2 2 10 1 3 15 2 4 27 1 输出 1 4 127 测试样例2 输入 7 1 99 2 2 6 1 3 16 2 4 27 1 5 12 5 6 11 5 7 10 4 输出 1 4 5 6 7 159 (1)背包问题 (2)待时限作业的排序问题 (1)Point1: 在时限背包问题的过程中,因为物品的属性值中全部都是整数型(int),但是单位质量价值和放入部分的占比均为小数(double),故在计算过程中多次出现计算值被写入成“0.0”的情况。 (2)Point2: 在第一版本的代码中未引入时钟,导致存在“时限远大于时钟,但作业未被执行(时限相同的作业只执行了一个)”的情况。 (1)背包问题 main()函数中向背包中放入物品,时间复杂度为O(n)。 void sort(sth a[],int n,int flag)采用冒泡排序的方式,时间复杂度为O(n2)。 (2)带时限作业的排序问题 main()函数中向执行作业,时间复杂度为O(n)。 void sort(Job a[],int n)和void array_sort(int a[],int n)采用冒泡排序方式,时间复杂度为O(n2)。 通过此次的实验,对贪心法的算法思想有了更深的了解。也就是不断选取当前状态的最优解,由一系列局部最优解得到全局最优解。同时也发现并不是所有问题都可以通过贪心算法求得最优解,因为使用贪心算法之前需要明确贪心选择策略。(2) 带时限的作业排序问题
三、实验结果及分析
1.算法设计
2.思路分析
3.核心代码
4.测试样例设计
5.运行结果(截图)




6.难点分析
7.算法时间复杂度分析
四、总结
Hadoop3:MapReduce的序列化和反序列化
STC 51单片机44——实现0.5秒间隔的单向流水灯
特征工程建模可解释包(note)
删除的照片怎么找回?教你5个好方法快速恢复
拼多多面试题
记录级别索引:Hudi 针对大型数据集的超快索引
Netty深入浅出(无处不在的IO)
算法模型总结:前后指针法
软件系统建模&架构风格-架构论文(三十八)