算法第四章实践报告
算法第四章实践报告
1.实践题目名称
4-1 程序存储问题
2.问题描述
设有n 个程序{1,2,…, n }要存放在长度为L的磁带上。程序i存放在磁带上的长度是 li,1≤i≤n。 程序存储问题要求确定这n 个程序在磁带上的一个存储方案, 使得能够在磁带上存储尽可能多的程序。 对于给定的n个程序存放在磁带上的长度,计算磁带上最多可以存储的程序数。
3.算法描述
先将n个程序按其长度由小到大排好序,然后将程序按顺序放入磁带,直至放不下为止。
具体代码实现如下:
#include <iostream>
#include <algorithm>
using namespace std;
int a[1001];
int main()
{
int n;
int length;
cin>>n>>length;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
sort(a,a+n);
int temp=length;
int count=0;
for(int j=0;j<n;j++)
{
if(temp>=a[j])
{
count++;
temp=temp-a[j];
}
else
continue;
}
cout<<count<<endl;
return 0;
}
该算法满足贪心选择性质。因为贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择。每做一次贪心选择,就将所求问题化简为规模更小的子问题。因为该题要求磁盘可以装尽量多的程序,因为磁盘的空间有限,想要装多的程序,就应该优先选择存长度短的程序,这样每存入一个程序,待存的程序数目就会不断减少,使得所求问题化简为规模更小的子问题,并且每次选的都是当前长度最短的程序,所以都是局部最优的选择。综上,该算法满足贪心选择性质。
4.算法时间复杂度
该程序进行了一次快排,时间复杂度为O(nlogn),并且该程序循环了n次,时间复杂度为O(n),因为O(nlogn)>O(n),所以,该程序的时间复杂度为O(nlogn)。
5.对贪心算法的理解
“贪心算法”顾名思义就是贪心,就是想要得到更多,想要接近自己的心中预期。其实贪心算法总是做出在当前看来是最好的选择,贪心算法并不从整体最优上加以考虑,所做的选择只是在某种意义上的局部最优选择,也希望达到一个整体最优解。但即使贪心算法不能得到整体最优解,其最终结果也是最优解很好的近似解。
能用贪心算法求解的问题应具有贪心选择性质和最优子结构性质。贪心选择性质:指问题的最优解可以通过一系列局部最优解的选择得到。贪心算法做贪心选择可以依赖于以往所做过的选择,但决不依赖于将来所作的选择,也不依赖于子问题的解。最优子结构性质:指问题的最优解包含其子问题的最优解。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗