贪心法——活动选择问题和背包问题

        今天上午听了米老师讲的算法,感觉收获很多,对于算法更加有信心了。首先,先来宏观看一下:

 

       

           这三种算法总的来说,刚开始看的时候不知道怎么下手,但是看多了也会有那么一点儿感觉。分治法是这三种算法里面都有的思想,动态规划和贪心都是将问题分解成子问题求解,但动态规划里面的子问题都带有联系,而贪心算法里面的子问题都相对独立,唯一不同的是,贪心算法要首先想出一个解决方案来构造求解最优解的过程。

     宏观介绍下算法后,来看看贪心算法的两个实例。

   一,活动选择问题

    

          

    解决方案:   

              对于活动的选择问题,我们求解过程是这样的,先把这些活动按照结束时间从早到晚排列,然后从第一个开始选择,如果第i个活动的开始时间比第i-1个活动的结束时间晚,我们就将此活动加入到解集合中。

       

    伪代码解读:

          递归方式求解:

   

            迭代方式求解:

   如果看完伪代码后还是没什么感觉,可以用下面的一些数据进行计算:

          

    

二,背包问题

 

       

   解决方案:

          
因为可以部分装入背包,所以,我们将物品按照单位价值从大到小排序,依次选取,直到背包被装满为止。

 伪代码解读:

        

 

      

       小结,本来也想写写动态规划的伪代码注解的,but......我也不太懂,算法一直以来是我比较弱的地方,但是感觉研究起来,也是最有意思的,跪求大神参与讨论~~~~~~~

       

  

时间: 2024-09-30 00:03:13

贪心法——活动选择问题和背包问题的相关文章

用贪心法求解背包问题的解决方法_C 语言

贪心方法:总是对当前的问题作最好的选择,也就是局部寻优.最后得到整体最优.应用:1:该问题可以通过"局部寻优"逐步过渡到"整体最优",这是贪心选择性质与"动态规划"的主要差别.2:最优子结构性质:某个问题的整体最优解包含了"子"问题的最优解.完整的代码如下: 复制代码 代码如下: #include "iostream"using namespace std;struct goodinfo{ float p;

贪心法 背包问题 一道简单的实际问题 不知道大难如何计算出来的。

问题描述 贪心法 背包问题 一道简单的实际问题 不知道大难如何计算出来的. 问题:设有背包问题实例n=7,M=15(背包载重),(w0,w1,...,w6)=(2,3,5,7,1,4,1), 物品装入背包的收益为:(p0,p1,p2,p3,p4,p5,p6)=(10,5,15,7,6,18,3). 求这一实例的最优解和最大收益 答案:最优解:(p0/wo,p1/w1,p2/w2,p3/w3,p4/w4,p5/w5,p6/w6)=(10/2,5/3,15/5,7/7,6/1,18/4,3/1)(x

c++-贪心法 区间完全覆盖问题

问题描述 贪心法 区间完全覆盖问题 50C 给定一个长度为m的区间~再给出n条用闭区间表示的线段~用贪心法求出最少的线段能覆盖完m区间~例: 区间长度8,可选的覆盖线段[26][14][36][37][68][24][35] 现需要代码 c++的 过程 : 1将每一个区间按照左端点递增顺序排列,拍完序后为[14],[24],[26],[35],[36],[37],[68] 2设置一个变量表示已经覆盖到的区域.再剩下的线段中找出所有左端点小于等于当前已经覆盖到的区域的右端点的线段中,右端点最大的线

【OJ】贪心法(最小字典序)poj3617 Best Cow Line// acmclub 12701/12695

     题目链接:      点击打开链接 /* POJ 3617 Best Cow Line 贪心法--最小字典序 */ #include<stdio.h> #include<string.h> char ss[30010]; int main(){ int n,left1;scanf("%d",&n); getchar();//不可少,接收前一个\n for(int j=0;j<n;j++){// // scanf("%c"

多指标综合评价中指标正向化和无量纲化方法的选择

摘要:本文用实例说明了多指标综合评价中,用"倒数逆变换法"进行指标正向化时会完全改变原指标的分布规律,影响综合评价结果的准确性:对三种常用无量纲化方法--极差变换法.标准化法和均值化法的选择使用问题,用实例进行了比较分析. 关键词:综合评价,正向化,无量纲化,标准化法,均值化法 在多指标综合评价中,有些是指标值越大评价越好的指标,称为正向指标(也称效益型指标或望大型指标):有些是指标值越小评价越好的指标,称为逆向指标(也称成本型指标或望小型指标),还有些是指标值越接近某个值越好的指标,

贪心法 最小圈基问题-贪心法解决最小圈基问题。

问题描述 贪心法解决最小圈基问题. 在网上找不到关于最小圈基的资料,不知道有木有大神来拯救下我这个小白新手- 解决方案 我的算法实验有这个,自己写了,不是很好,可以参考我的博客

【OJ】贪心法 (区间问题——木棒)1129/

题目链接:点击打开链接 /* 贪心法 (区间问题--木棒)1129/ */ #include<iostream> #include<algorithm> #include<string.h> using namespace std; const int maxn=5010; typedef pair<int,int> P; pair<int,int>itv[maxn]; int ok[maxn]; bool comp( P a,const P &

贪心法求解三种有关区间覆盖问题

                                               基于贪心算法的几类区间覆盖问题 (1)区间完全覆盖问题 问题描述:给定一个长度为m的区间,再给出n条线段的起点和终点(注意这里是闭区间),求最少使用多少条线段可以将整个区间完全覆盖 样例: 区间长度8,可选的覆盖线段[2,6],[1,4],[3,6],[3,7],[6,8],[2,4],[3,5] 解题过程: 1将每一个区间按照左端点递增顺序排列,拍完序后为[1,4],[2,4],[2,6],[3,5]

C++ 基本算法 冒泡法、交换法、选择法、实现代码集合_C 语言

1.冒泡法: 这是最原始,也是众所周知的最慢的算法了.他的名字的由来因为它的工作看来象是冒泡: 复制代码 代码如下: #include <iostream.h> void BubbleSort(int* pData,int Count) { int iTemp; for(int i=1;i<Count;i++) { for(int j=Count-1;j>=i;j--) {if(pData[j]<pData[j-1]) { iTemp = pData[j-1]; pData[