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

软工2101崔吉风 2022-11-21 10:47:59
  1. 请说明作业三程序存储问题的贪心策略,并用反证法证明满足贪心选择性质,并给出时间复杂度分析

代码如下:

#include<iostream>

using namespace std;

int a[1000];

void swap(int &x,int &y){

       int tmp;

       tmp = x;

       x = y;

       y = tmp;

}

int main()

{

       int n,m;

       cin >>n >>m;

       for (int i = 0;i < n;i++)

              cin >> a[i];

       for (int i = 0;i<n;i++)

              for (int j = 0;j < n-1;j++){

                     if (a[j] > a[j+1])

                            swap(a[j],a[j+1]);

              }

 

       int sum = 0,k = 0;

       for (int i = 0;i < n;i++){

              sum += a[i];

              k+=1;

              if (sum > m){

                     cout << k-1;

                     break;

                     }

              if (sum <= m && i == (n-1))

                     cout <<k;

       }

}

贪心策略:

求固定长度的磁带上存放的最多程序,即将程序放在磁带上的长度降序排列,然后从最小长度开始选择,最后得到最优解

反证法:

       在第一次可以选择最小程序的前提下,假设在最优解中去掉第一次选择的最小程序后得到的子问题的最优解的t0大于原问题最优解的t1,那么将最小程序加入选择产生的解的t2大于t1,此时t1不是最优解,这不成立。故此问题具有最优子结构性质。

时间复杂度分析:

排序O(nlogn) + 循环O(n) ,故时间复杂度为O(nlogn)

  1. 你对贪心算法的理解

贪心法是指在求解问题的途中,总是做出在当前情况下最优的选择,即不在总体上考虑,只做出局部的最优解,贪心法的求解问题效率高,同时代码简单,对于解决一个问题选择使用贪心算法首先要确定其是否具有贪心选择性质和最优子结构性质,然后确保贪心策略是否正确

...全文
47 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

434

社区成员

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

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