04贪心算法

news2024/11/25 0:54:34

文章目录

  • 背包问题
  • 活动安排问题
  • 最优装载问题
  • 删数问题
  • 最优服务次序

贪心算法
在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。

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

贪心与动态规划

联系:均由局部最优解来推导全局最优解,问题都具有最优子结构性质。

区别: 贪心只从当前的选择中,构造某种最优解。 动态规划综合考虑之前状态和当前的选择,决定当前状态的最优解。

背包问题

在这里插入图片描述
首先计算每种物品单位重量的价值Pi = Vi / Wi

然后,依贪心选择策略,将尽可能多的单位重量价值最高的物品装入背包。若将这种物品全部装入背包后,背包内的物品总重量未超过C,则选择单位重量价值次高的物品并尽可能多地装入背包。

依此策略一直地进行下去,直到背包装满为止。

void Knapsack(int n,float M,float v[],float w[],float x[])
{  //n为物品总数,M为总容量
       Sort(n,v,w);
       int i;
       for (i=1;i<=n;i++) x[i]=0;
       float c=M;  // 剩余的容量
       for (i=1;i<=n;i++) {
          if (w[i]>c)  break;
          x[i]=1;
          c-=w[i];
          }
       if (i<=n) x[i]=c/w[i];
}

算法knapsack的主要计算时间在于将各种物品依其单位重量的价值从大到小排序。因此,算法的计算时间上界为O(nlogn)。

活动安排问题

在这里插入图片描述


template<class Type>
void GreedySelector(int n, Type s[], Type f[], bool A[])
{ // s数组存储活动起始时间,f数组存储活动结束时间,且各活动按结束时间已按非减序排列;A数组存储被选中的活动。
       A[1]=true;  // 选择活动1(结束最早的活动)
       int j=1; // j记录最近一次被选中的活动
       for (int i=2;i<=n;i++) {
          if (s[i]>=f[j]) { A[i]=true; j=i; }
          else A[i]=false;
          } // 每次总是选择具有最早完成时间的相容活动加入集合A中
}

最优装载问题

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

int  Loading(int x[ ],  int w[ ],  int C,  int n) // C为轮船剩余载重量
{    int *t= new  int[n+1];
     Sort(w, t, n);    
     for(i=1;i<=n; ++i)   x[i]=0;
     for(i=1;   w[t[i]]<=C&& i<=n;  ++i)
         {   x[t[i]]=1;  C -= w[t[i]];    }   
}

删数问题

在这里插入图片描述
在这里插入图片描述
每次对正整数a进行“从最高位向最低位”的扫描,若当前位比后一位大,则删除当前位,后续的数字前移。

while (k > 0)
{
  int i = 0;
  while (i <= len && a[i] <= a[i+1])
      i++;            
  for (int j = i; j <= len; j++) 
      a[j] = a[j+1];
   k--;
   len--;
}

在这里插入图片描述

最优服务次序

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/126353.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

奖励视频 — Verasity 的最新专利意味着什么?

目录 Verasity 的最新专利涵盖哪些内容&#xff1f; 美国专利审批流程——拒绝和批准 主张我们的专利并寻求许可费 这对 Verasity 意味着什么&#xff1f; 近日&#xff0c;我们宣布Verasity 已在全球最大的广告和媒体市场美国获得奖励视频专利。 该专利及其全部内容可在此…

Vue--》超详细教程——vite脚手架的搭建与使用

目录 vite 创建 vite 项目 目录文件的构成 vite项目的运行流程 开发者工具安装 vite vue官方提供了两种快速创建工程化的SPA项目的方式&#xff0c;一种是基于 vue-cli 创建的SPA项目&#xff0c;另一种就是基于 vite 创建的SPA项目。两者的区别如下&#xff1a; 说明v…

如何在电脑录屏?win10录屏快捷键ctrl+alt+

日常使用的电脑有很多功能未被大家发现&#xff0c;比如可以录制屏幕视频&#xff1b;那如何在电脑录屏&#xff1f;win10电脑录屏有没有什么快捷键可以快速录制&#xff1f;下面就一起和小编来看看win10录屏快捷键是如何在电脑录屏的&#xff0c;有需要的朋友可以去试试看。 一…

观察者模式Observer

1.意图&#xff1a;定义对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都得到通知并被自动更新。 2.结构 Subject&#xff08;目标&#xff09;知道它的观察者&#xff0c;可以有任意多个观察者观察同一个目标&#xff1…

Flutter GetX系列教程---GetxController

安装 将 GetX 添加到你的 pubspec.yaml 文件中 dependencies:get: ^4.6.5在需要用到的文件中导入&#xff0c;它将被使用。 import package:get/get.dart;GetxController介绍 在实际的项目开发过程中&#xff0c;我们不可能把UI代码、业务逻辑都放在一起处理&#xff0c;这…

Google 二次签名 导致 Facebook , Google 登录失败

前言&#xff1a; 最近接了几款游戏 里面携带了facebook 授权登录和google 授权问题 问题场景 在没有上线之前 我们运营和测试 验收都没有问题 但是把游戏包发到商店后再重商店下载出来就不能授权登录。 原因 因为App上传到Google Play后&#xff0c;Google Play 有个签名…

使用idea无法推送到gitee,显示head detached(游离分支)

在idea下将代码回退到某一历史版本&#xff0c;修改后push提醒detaced head&#xff0c;即处于游离状态&#xff0c;使用 git branch命令&#xff08;辅助git status查看提交状态&#xff09;查看&#xff1a; 解决方法 在git bash下***&#xff08;注意&#xff09;切换到项…

django使用一——规范化创建

背景 为便于后续维护&#xff0c;前期对django创建等操作做一些规范化要求 实操 1、【项目创建】先创建一个项目&#xff0c;其中SSS可以项目架构相关&#xff0c;XXX则是项目名称 常用命令&#xff1a; django startproject SSS_app_XXX如果提示报错django命令不存在&…

超全地牢场景unity3d模型素材网站整理

家人们&#xff0c;最近我找到了一个很好用的地牢场景unity3d模型免费素材网站 资源贼多&#xff0c;重点是免费&#xff01;&#xff01;&#xff01;嘿嘿嘿&#xff01;&#xff01;&#xff01;感兴趣的可以进去看看 接下来就给大家介绍一下我珍藏已久的网站&#xff1a; …

string类的基本使用及模拟实现(深浅拷贝)

目录 浅拷贝与深拷贝 string的基本使用和模拟实现 浅拷贝与深拷贝 namespace lyl { class string { public: string(const char* str) :_str(new char[strlen(str)1]) { strcpy(_str, str); } ~string() …

TPM零知识学习九 —— TPM规范学习之TPM介绍

前边的系列文章主要从实际平台移植和TPM环境搭建的角度讲解了TPM&#xff0c;现在到了踏实下来学习理论知识的时候了。从本篇文章开始&#xff0c;开启TPM2.0规范学习之旅。参考书目为&#xff1a;《A Practical Guide to TPM 2.0 — Using the Trusted Plaform Module in the …

利器 | REST Assured 实践(二):断言实现

在上一篇文章中&#xff0c;我们初步探讨了 REST Assured 的应用实践&#xff0c;还有很多丰富的用法需要慢慢探索研究。而 REST Assured 提供的完整断言手段&#xff0c;是测试工程师最常用最重要的功能之一。断言该如何使用呢&#xff1f; 这里以 rest-assured 官方给的一个…

好用的元数据管理工具是什么样

元数据是数据的“说明书”&#xff0c;元数据管理工具是企业数据治理的重要抓手&#xff0c;它可以帮助企业解决数据查找难、理解难等问题&#xff0c;促进数据的集成和共享。一个趁手的元数据管理工具是什么样的呢&#xff1f; 01 系统架构 从应用角度看&#xff0c;元数据管…

基于颜色直方图优化的图像增强方法

最近改图像颜色迁移的论文&#xff0c;审稿人要求补充基于直方图优化的方法细节。趁此机会&#xff0c;我重新下载了相关文献&#xff0c;决定重新学习下该类方法&#xff0c;并把一些细节记录在本篇博客中&#xff0c;供交流学习。 目录 1. 前言 2. 背景知识 3. 颜色变换 4. 颜…

若依源码分析(二)-登录流程源码分析

若依源码分析&#xff08;二&#xff09;-登录流程源码分析 本章节主要分析若依源码登录流程&#xff0c;一步一步走断点查看进入首页的全流程登录信息 1. 前台发起登录请求 http://127.0.0.1/dev-api/auth/login //auth表明这个请求走的是服务名称为auth的服务2. 后台处理流…

【虚幻引擎】UE4像素流推送PixelStreaming

一、前言 虚幻引擎像素流送&#xff08;Pixel Streaming&#xff09;允许你从任何有屏幕的联网设备&#xff08;例如计算机&#xff0c;手机&#xff0c;平板电脑等&#xff09;播放虚幻项目。在这个教程里&#xff0c;我们将学习如何激活虚幻引擎的像素流送并从任何Web浏览器控…

年尾结款,如何应对客户新的需求风险?

1、进行需求变更管理流程 需要提前建立需求基线&#xff0c;需求基线是需求变更的依据&#xff0c;并制定双方皆认可的需求变更流程。 在前期与用户签订合同时&#xff0c;可以增加一些相关条款&#xff0c;如限定用户提出需求变更的时间&#xff0c;规定何种情况的变更可以接受…

日期和时间的API

一、JDK8之前的日期和时间的API 1.System类中的currentTimeMillis() 返回当前时间与1970年1月1日0分0秒之间以毫秒为单位的时间差&#xff0c;称为时间戳 2.Java.util.Date类 |---java.sql.Date类 1.两个构造器的使用 >构造器一: Date(): 创建一个对应当前时间的Date对象…

CVE-2022-08475-DirtyPipe

前言CVE-2022-0847 DirtyPipe脏管道漏洞是Linux内核中的一个漏洞&#xff0c;该漏洞允许写只读文件&#xff0c;从而导致提权。调试环境• ubuntu 20.04• Linux-5.16.10• qemu-system-x86_64 4.2.1漏洞验证首先创建一个只读文件foo.txt&#xff0c;并且正常情况下是无法修改该…

2022年「博客之星」参赛博主:黛琳ghz

我正在参加年度博客之星评选&#xff0c;请大家帮我投票打分&#xff0c;您的每一分都是对我的支持与鼓励。五星必回&#xff0c;诚信互评&#xff0c;&#xff08;如果&#xff09;今日已满&#xff0c;明天必回&#xff0c;言出必行&#xff0c;感谢支持&#xff01; 我正在…