计硕3班 孙志州-2022222274-第四章作业

tssq2009 2022-12-30 13:17:18

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

1. 概括第四章学习内容,总结第四章学习心得。

第四章集中学习了贪心算法相关知识。主要学习内容如下图所示:

在本章知识中,求解最优解问题过程中,经常遇到贪心算法与动态规划算法有相互混淆的现象,通过本章对贪心算法的特点以及问题解特征的学习,更进一步掌握了这些问题。

 

2. {0-1}背包问题和背包问题为例,讨论动态规划算法与贪心算法的异同。

0-1背包问题:

给定n种物品和一背包。物品i的重量是wi,其价值为bi,背包容量为w。问如何选择装入背包的物品使得装入背包的物品总价值最大? (wi, bi w 都是整数)

0-1背包问题的最优子结构性质,可以建立计算B(kw)的递归式如下:

算法描述为:

Knapsack(int n, bll,wll.W)
{
boolean x[]; 
int B[n][W];
for (int w = 0; w<=W; w++) B[0,w] = 0;
for (int i = 1; i<=n; i++) {
B[i,0] = 0;
for (int w = 1; w<=W; w++){
if (w[i] <= w){ 
if (b[i] + B[i-1,w-w] > B[i-1,w]{
B[i,w] = b[i] + B[i-l,w- w[i]];
}
else{ B[i,w] = B[i-l,w]; }
else {B[i],w] = B[i-1,w]; } 
}
}
}

背包问题

0-1背包问题类似,所不同的是在选择物品i装入背包时,可以选择物品i的一部分,而不一定要全部装入背包,1<i<n

2类问题都具有最优子结构性质,极为相似,但背包问题可用贪心算法求解得到最优解,0-1背包问题却不能用贪心算法求解。

其算法描述为:
 

GREEDY-KNAPSACK(valueln],weight[n],C)
{float x(nl, LW;
Sort(value[n]/weightn]);
for(i=1;i<=n;i++) x[i]=0;
LW=C;
i=1;
while(weight[i]<=LW){
x[i]=1;
LW=LW-weight[i];
i++;
}
x[i]= LW/ weight[i];;
}

贪心算法与动态规划算法的差异

共同点:所求解的问题具有最优子结构性质。

问题1:具有最优子结构的问题应该选用贪心算法还是动态规划算法求解?

问题2:能用动态规划算法求解的问题是否也能用贪心算法求解?

背包问题实例:贪心算法与动态规划算法的区别。

 

3. 算法实验2:完成教材114页算法实现题4-2总结实验出现问题及解决方法。

#include <bits/stdc++.h>
  using namespace std;
  bool cmp(int a, int b){
    return a>b;
 }
 
 int main(){
 int k;
int a[1000], b[1000];
int Min = 0, Max = 0;
cin>>k;
for(int i=0; i<k; i++){
    cin>>a[i];
    b[i]= a[i];
   }
  sort(a, a+k);
  sort(b, b+k, cmp);
  for(int i=0; i<k-1; i++){
a[i+1] = a[i]+a[i+1];
Min += a[i+1];
sort(a+i+1, a+k);

b[i+1] = b[i]+b[i+1];
        Max += b[i+1];
  sort(b+i+1, b+k ,cmp);
  }
cout<<Max-k+1<<' '<<Min-k+1<<endl;
  return 0;
}

4. 算法实验2:完成教材118页算法实现题4-14总结实验出现问题及解决方法。

#include <bits/stdc++.h>
int main()
{
int n,k; 
int numx;  
    long long min=0,max=0; 
    priority_queue<int, vector<int>, greater<int> > qc;   
    priority_queue<int, vector<int>, less<int> > qd;
    cin>>n>>k;
    for(int i=0;i<n;i++)  
    {
        cin>>numx;
        qc.push(numx);
        qd.push(numx);
    }
    while(qc.size()%(k-1)!=1)  
        qc.push(0);  
    while(qc.size()>1)
    {
        long long sum=0;
        for(int i=0;i<k;i++)   
        {
            sum+=qc.top();
            qc.pop();  
        }
        min+=sum;  
        qc.push(sum); 
    }
 
    while(qd.size()>1)
    {
        long long sum=0;
        for(int i=0;i<2;i++)
        {
             sum+=qd.top();
             qd.pop();
        }
        max+=sum;
        qd.push(sum);
    }
    cout<<max<<" "<<min<<endl;
    return 0;
}

 

 

...全文
208 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文围绕“重磅粉丝福利专栏1.7电力系统潮流和最优潮流”展开,重点介绍电力系统中潮流计算与最优潮流(Optimal Power Flow, OPF)的核心理论与Matlab仿真实现方法。内容涵盖交直流混合配电网的统一求解潮流算法、基于改进智能优化算法(如粒子群、遗传算法等)的无功优化与最优潮流求解,并结合IEEE标准节点系统(如IEEE30、IEEE33等)进行建模与仿真验证。专栏强调实际科研复现能力,提供大量Matlab代码实例,帮助读者掌握电力系统稳态分析的关键技术,深入理解电网运行的经济性与安全性优化机制。; 适合人群:具备电力系统分析基础,熟悉Matlab编程,从事电气工程、能源系统优化等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:① 掌握电力系统潮流计算的基本原理与数值求解方法;② 学习如何利用智能优化算法求解最优潮流问题,实现电网无功优化、降低网损、提升电压稳定性;③ 通过Matlab代码复现经典论文案例,提升科研仿真与工程实践能力。; 阅读建议:建议结合文中提供的Matlab代码与IEEE标准测试系统进行动手实践,重点关注算法实现细节与参数设置,同时参考配套论文深入理解模型构建逻辑,以达到理论与仿真深度融合的学习效果。
内容概要:本文档系统梳理了2026年软考高项考试中涉及的公共基础、新一代信息技术及法律法规相关内容,重点涵盖信息化发展战略(如数字中国、新基建、工业互联网、车联网、元宇宙)、信息技术基础(计算机体系结构、网络、数据库、信息安全)、五大新兴技术(物联网、云计算、大数据、区块链、人工智能)的核心概念与应用,以及IT治理、IT审计、信息系统管理方法。同时详细解读了《招标投标法》《政府采购法》《民法典合同编》《网络安全法》《数据安全法》《个人信息保护法》等关键法律法规的核心条款,并提供了知识产权与标准规范的相关知识。最后整理了专业英语高频词汇和各模块的高频考点速记表,帮助考生高效备考。; 适合人群:准备参加2026年或2027年软考高项的信息系统项目管理人员、IT从业人员及技术管理者,尤其适合需要系统掌握信息化发展、新技术应用与法律合规知识的考生。; 使用场景及目标:①系统复习软考高项中公共基础、新技术与法规模块的核心考点;②掌握云计算、大数据、区块链、AI等技术的基本原理与应用场景;③理解招投标、政府采购、合同、网络安全与数据保护等法律法规的关键内容;④提升专业英语阅读能力,熟悉高频术语。; 阅读建议:结合高频考点速记表进行重点记忆,对法律法规部分关注“高频考点”标注内容,技术部分建议对照实际案例理解应用,专业英语建议反复背诵表格词汇以提高答题速度。

144

社区成员

发帖
与我相关
我的任务
社区描述
高校教学社区
软件工程 高校
社区管理员
  • dainwnu
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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