算法设计与分析第四章作业

软件工程2101邓文淏 2022-11-21 10:31:27

算法设计与分析第四章作业

设有n 个程序{1,2,…, n }要存放在长度为L的磁带上。程序i存放在磁带上的长度是 li,1≤i≤n。 程序存储问题要求确定这n 个程序在磁带上的一个存储方案, 使得能够在磁带上存储尽可能多的程序。 对于给定的n个程序存放在磁带上的长度,计算磁带上最多可以存储的程序数。

输入格式:

第一行是2 个正整数,分别表示文件个数n和磁带的长度L。接下来的1行中,有n个正整数,表示程序存放在磁带上的长度。

输出格式:

输出最多可以存储的程序数。

输入样例:

在这里给出一组输入。例如:

6 50 
2 3 13 8 80 20

输出样例:

在这里给出相应的输出。例如:

5

问题描述

条件:磁盘空间有限;程序大小不同。

在有限的磁盘上存放尽可能多的程序,就要求选择的程序尽可能小。

算法描述

贪心算法:总是从可选程序中选择最小的试放入磁盘。

  1. 排序:对程序按大小升序排;

  2. 循环添加:从i = 1开始,选择排序后序列的第 i 个(即a[i],1 <= i <= n)个加入暂存(sum,初始为0),判断是否满足sum小于磁盘空间,是则计数(count++),否则跳出循环;

反证法证明贪心选择可以推出最优解:

  1. 证明选择可以从贪心(最小程序)开始:选择从最小程序开始即解不为空时可以选择最小程序。假设解不为空,从这样得到的选择序列中任选一个,用最小程序替换,放入程序数(count)不变;

  2. 证明最优子结构性质:在解不为空、第一次可以选择最小程序的前提下,假设在最优解中去掉第一次选择的最小程序后得到的子问题的最优解的count_0大于原问题最优解的count_1-1,那么将最小程序加入选择产生的解的count_2大于count_1,此时count_1不是最优解,这不成立。故此问题具有最优子结构性质。

时间和空间复杂度分析

时间复杂度:程序进行了一次快排(O(nlogn))和循环(O(n)),故时间复杂度为O(nlogn);

空间复杂度:程序new了一个一维数组(a[n])用于存放每个程序的大小,故时间复杂度为O(n)。

贪心算法

贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,只做出在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。

解题的一般步骤

  1. 建立数学模型来描述问题;
  2. 把求解的问题分成若干个子问题;
  3. 对每一子问题求解,得到子问题的局部最优解;
  4. 把子问题的局部最优解合成原来问题的一个解。

​ 和动态规划有相似之处。最优解问题大部分都可以拆分成一个个的子问题,把解空间的遍历视作对子问题树的遍历,则以某种形式对树整个的遍历一遍就可以求出最优解,大部分情况下这是不可行的。贪心算法和动态规划本质上是对子问题树的一种修剪,两种算法要求问题都具有的一个性质就是子问题最优性(组成最优解的每一个子问题的解,对于这个子问题本身肯定也是最优的)。动态规划方法代表了这一类问题的一般解法,我们自底向上构造子问题的解,对每一个子树的根,求出下面每一个叶子的值,并且以其中的最优值作为自身的值,其它的值舍弃。而贪心算法是动态规划方法的一个特例,可以证明每一个子树的根的值不取决于下面叶子的值,而只取决于当前问题的状况。换句话说,不需要知道一个节点所有子树的情况,就可以求出这个节点的值。由于贪心算法的这个特性,它对解空间树的遍历不需要自底向上,而只需要自根开始,选择最优的路,一直走到底就可以了。

...全文
34 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文介绍了基于蝴蝶优化算法(Butterfly Optimization Algorithm, BOA)解决电力系统中最优无功功率分配问题的研究,采用IEEE30节点标准测试系统进行仿真验证。通过Matlab编程实现该智能优化算法,对无功电源出力、变压器变比及并联补偿设备等控制变量进行优化调节,以降低网损、改善电压质量、提高系统运行效率为目标,构建多目标优化模型并求解。文中详细阐述了算法原理、数学建模过程、约束条件处理及仿真结果分析,展示了BOA在电力系统无功优化领域的有效性和收敛性能。; 适合人群:电气工程及相关专业背景,具备一定电力系统分析基础和Matlab编程能力的高校研究生、科研人员及从事电力系统优化运行的工程技术人员。; 使用场景及目标:①应用于电力系统运行与控制中的无功优化调度,提升电网经济性与稳定性;②作为智能优化算法在电力系统中应用的教学案例,帮助理解BOA算法的设计思想与实现流程;③为微电网、主动配电网等复杂系统的无功电压协调控制提供技术参考。; 阅读建议:建议读者结合IEEE30节点系统数据文件与Matlab代码进行实操演练,重点关注目标函数构建、约束条件处理及算法参数设置部分,通过调整算法参数观察优化效果变化,深入掌握蝴蝶优化算法的调参规律与工程应用技巧。
内容概要:本文介绍了基于Python的课程达成度分析系统的设计与实现,旨在通过自动化、智能化手段提升高校教学质量评价的科学性与效率。系统整合多源异构教学数据(如成绩、作业、课堂行为等),利用Python强大的数据处理库(如pandas、NumPy、SQLAlchemy)进行数据采集、清洗与融合,并构建标准化的课程目标达成度评价模型。系统采用分层架构,涵盖数据层、业务逻辑层、前端呈现层、安全控制模块及拓展维护层,支持多维度数据分析、异常监测、群体对比与可视化报告生成,形成“评价—反馈—改进”的教学闭环,助力教育信息化与数据驱动决策。文中还提供了关键模块的代码示例,如数据合并、标准化处理与加权计算等。; 适合人群:具备一定Python编程与数据分析基础,从事教育信息化研究、教学质量管理或教育技术开发的高校教师、研究人员及软件开发者。; 使用场景及目标:①实现课程目标达成度的自动化计算与动态监控;②支持多班级、多课程的教学质量横向对比与异常预警;③为专业认证、教学评估和持续改进提供数据支撑;④推动高校教学评价从经验型向数据驱动型转变。; 阅读建议:此资源以实际项目为导向,结合模型设计与代码实践,建议读者结合完整代码与GUI实现深入学习,并根据所在院校的数据结构进行适配开发,重点关注数据标准化、权重配置与可视化交互设计。

434

社区成员

发帖
与我相关
我的任务
社区描述
广东外语外贸大学信息科学与技术学院
算法 高校
社区管理员
  • brisksea
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧