(七)贪心法

2023-05-16

贪心法比较简单,从这个算法的名字看来差不多都了解了,贪心,贪心的人是只顾一时的利益,不顾长远的利益。


       贪心法把一个问复杂问题分解为一系列较为简单的局部最优选择,每一步选择都是对当前的一个扩展,直到获得问题的完全解。贪心法的典型应用是求解最优化问题,而且对许多问题能得到最优解,即使不能得到最优解也能与最优解很好的近似。


【贪心法设计思想】:

       贪心法(greedy method)在解决问题的策略上目光短浅,只根据当前已有的信息做出选择,而且一旦做出了选择,不管将来有什么结果,这个选择都不会改变。犹如那种一条道走到黑的感觉,可能大多数是走到白。


采用贪心算法解决背包问题

       【问题描述】:

       还是那个强盗,这是一个贪心的强盗,想尽快的拿到东西就走人,拿到了就够自己吃到一辈子了,他一定是这样想的。

       【思考】:

       可以有三种贪心选择策略。

       (1)选择价值最大的物品。

       (2)选择重量最轻的物品。

       (3)选择单位重量价值最大的物品。


       【例题】:

       例如,有3个物品,其重量分别是{20, 30, 10},价值分别为{60, 120, 50},背包的容量为50,应用三种贪心策略装入背包的物品和获得的价值如图所示。







       【C++代码】:

#include<stdio.h> 
int max(int a,int b) 
{ 
 if(a>b) 
  return a; 
 else 
  return b; 
} 
void Knapsack(int *v,int *w,int *x,int c,int n, int m[8][100]) 
{ 
 int i,j; 
 for(j=0;j<c;j++) 
 { 
  if(j<w[n])         
   m[n][j]=0; 
  else              
   m[n][j]=v[n]; 
 } 
 for(i=n-1;i>=1;i--) 
 { 
  for(j=w[i];j<=c;j++)                   
   m[i][j]=max(m[i+1][j],m[i+1][j-w[i]]+v[i]);  } 
 for(i=1;i<n;i++)   
 { 
  if(m[i][c]==m[i+1][c]) 
    x[i]=0; 
  else 
  {x[i]=1;   c=c-w[i];} 
 } 
 x[n]=(m[n][c])?1:0; 
 return; 
} 

int main() 
{ 
 int i=0;
 int n=7; 
 int w[]={0,2,3,5,7,1,4,1}; 
 int v[]={0,10,5,15,7,6,18,3}; 
 int x[]={0,0,0,0,0,0,0,0}; 
 printf("物品总数为:7\n");
 printf("物品重量和价值分别为:\n");
 printf("\n重量    价值 \n"); 
 for (i=1;i<=n;i++) 
 printf("%d        %d \n",w[i],v[i]); 
 int m=15; 
 int array[8][100]={0}; 
 Knapsack(v,w,x,m,7,array); 
 printf("背包能装的最大价值为: %d\n",array[1][m]);
 printf("贪心算法的解为: "); 
 for(i=1;i<=n;i++) 
 { 
  if(i==1) 
   printf("%d",x[i]); 
  else 
   printf("  %d",x[i]); 
 }  
 printf("\n"); 
 return 0;    
}


       利用贪心算法还可以解决很多问题,例如TSP问题,活动安排问题等,在这里就不详细介绍了,有兴趣的童鞋可以去网上查找哦。




       本节结束,下一节回溯法
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(七)贪心法 的相关文章

随机推荐

  • ERROR 1118 (42000): Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ...

    在创建数据库表时报错 之前已经在数据库里创建了多张表 xff0c 但在创建其中一张数据库表时报如下错 xff1a ERROR span class token number 1118 span span class token punctu
  • Ubuntu Gnome下怎样修改应用的图标icon

    我在我机器上安装了一个matlab 但在软件搜索里找不到matlab 我发现是matlab没有对应的 desktop文件 顺便我将matlab的图标也修改下 步骤如下 1 准备一个icon图像文件 如我这里的文件名为matlab png 将
  • DOS,WINDOWS递归删除指定文件夹或文件

    DOS xff0c WINDOWS递归删除指定文件夹或文件 64 REM 64 REM Name 递归删除指定的目录 xff0c 请把此文件放在你希望执行的那个目录 64 REM Desciption 64 REM Author amosr
  • macOS 使用 - 使用系统屏幕共享(VNC)

    文章目录 关于 屏幕共享 应用 权限开启 开始连接 使用 Apple ID 连接 使用 IP 连接 连接成功 断开连接 参考 关于 屏幕共享 应用 macOS 自带屏幕共享功能 路径为 System Library CoreServices
  • 免费ddns f3322.net使用脚本更新公网ip小记

    话说今天服务器域名访问不了 xff0c 路由器也访问不了 xff0c 另听说停电了 xff0c 估计是ddns没有更新 下午到现场一看 xff0c c7v2的ddns显示未登陆 xff0c 因为这货刷了us固件 xff0c 能用的ddnd只
  • Unresolved reference: databinding 模块化,组件化报错

    不要只在 总的 libaray 中添加 dataBinding span class token punctuation span enabled span class token operator 61 span span class t
  • Android lottie java.lang.IllegalStateException: Missing values for keyframe

    使用Lottie动画的时候 xff0c 运行发现了此报错 xff0c 版本为2 4 0 xff0c 在经过几番的测试后 xff0c 更改了资源文件和xml里面的配置也不大行 tips 一定要在xml里面配置资源文件 xff0c 当你把资源文
  • 追求技术之路 - 那些陪伴我的书籍

    如今已经在广州一家嵌入式公司实习 xff0c 分享大学里度过的一些书籍 xff0c 有些还没读完 xff0c 个人比较喜欢经典书籍 xff0c 研读起来就有种奇妙的感觉 xff0c 比起人与人之间的复杂的关系 xff0c 书籍带给我的感觉很
  • 详解蓝牙标准中的GFSK调制

    简介 GFSK是一种简单但应用广泛的调制方式 xff0c 在蓝牙和802 11等无线通信标准中都有应用 802 11跳频FHSS时所用的调制方式是GFSK 2和GFSK 4 xff0c 采用BT 61 0 5的高斯滤波器 在GFSK 2和G
  • ajax入门 不要畏惧 很简单 进了门一切都好学多了

    以前总是听别人说ajax是多么的好 xff0c 然后自己就去借了本书看 xff0c 哇塞感觉好难哦 xff0c 什么介绍javascript html css xff0c 还有很多一些东西 看的那个难啊 xff0c 然后就是硬着头皮把它给看
  • IntelliJ IDEA With Git

    记录下Git如何与IntelliJ IDEA协作 文章目录 环境准备IntelliJ IDEA With Git 开发过程1 初次获取远端代码2 查看远端仓库分支3 将指定的远端分支同步到本地 xff08 建议同远端名一致 xff09 4
  • 环形缓冲区(ringbuffer)

    环形缓冲区 xff08 ringbuffer xff09 环形缓冲区是嵌入式系统中十分重要的一种数据结构 xff0c 比如在串口处理中 xff0c 串口中断接收数据直接往环形缓冲区丢数据 xff0c 而应用可以从环形缓冲区取数据进行处理 x
  • Gson解析异常:Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 1 path $

    首先检查你的retrofit配置是否正确 xff0c 解析异常 addConverterFactory GsonConverterFactory create 在这里修改成这个gson的 Retrofit retrofit 61 new R
  • leetcode|多线程专题

    1114 按序打印 我们提供了一个类 xff1a public class Foo public void one print 34 one 34 public void two print 34 two 34 public void th
  • OpenCV实战(1)——OpenCV与图像处理基础

    OpenCV实战 xff08 1 xff09 OpenCV与图像处理基础 0 前言1 OpenCV 基础1 1 安装 OpenCV1 2 OpenCV 主要模块1 3 使用 Qt 进行 OpenCV 开发 2 OpenCV 图像处理基础2
  • 1.机器视觉标准框架学习

    在工业机器视觉上 xff0c 常见的图像处理库有opencv halcon visionpro sherlcok等 其中visionpro和sherlcok是拖拽式编程 xff0c 方便用户开发视觉项目 但对于opencv 和halcon则
  • Gitlab权限说明

    Gitlab权限管理 Gitlab用户在组中有五种权限 xff1a Guest Reporter Developer Master Owner Guest xff1a 可以创建issue 发表评论 xff0c 不能读写版本库 Reporte
  • 二进制的浪漫

    0 基本性质 0 1 交换律 相同运算符下可任意交换 xff0c 不同的运算符不可交换 0 2 结合律 相同运算符是可结合的 0 3 分配律 a amp b
  • (九)分支限界法

    分支限界法 xff08 branch and bound method xff09 按广度优先策略搜索问题的解空间树 xff0c 在搜索过程中 xff0c 对待处理的节点根据限界函数估算目标函数的可能取值 xff0c 从中选取使目标函数取得
  • (七)贪心法

    贪心法比较简单 xff0c 从这个算法的名字看来差不多都了解了 xff0c 贪心 xff0c 贪心的人是只顾一时的利益 xff0c 不顾长远的利益 贪心法把一个问复杂问题分解为一系列较为简单的局部最优选择 xff0c 每一步选择都是对当前的