算法与数据结构高手养成:朴素的贪心法(上)最优化策略


✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭
~✨✨

🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。

我是Srlua小谢,在这里我会分享我的知识和经验。🎥

希望在这里,我们能一起探索IT世界的奥妙,提升我们的技能。🔮

记得先点赞👍后阅读哦~ 👏👏

📘📚 所属专栏:算法与数据结构高手养成

欢迎访问我的主页:Srlua小谢 获取更多信息和资源。✨✨🌙🌙

​​

​​

目录​​​​​​​

朴素的贪心法(上)最优化策略

常见贪心法归类

何为“朴素”贪心

最优化策略:取石子

取石子(改)

最优化策略适用条件

最优化策略:分析步骤

例题:机器工厂(USACO)​

步骤1:划分阶段和决策

步骤2:验证最优子结构/无后效性

步骤2.5:修改决策

步骤2.5:重新验证最优子结构/无后效性

步骤3:最优化策略

步骤3:最优化策略(改进)​

代码:机器工厂(C++)


朴素的贪心法(上)最优化策略

常见贪心法归类

1.最优化策略——每一次都采用当前最优决策

2.构造法——通过总结和归纳找到规律,直接推导出答案

3.二分答案——通过答案反推,验证合法性从而确定最优解

何为“朴素”贪心

  • 所谓“朴素”,就是可以通过确定性的贪心步骤得出最优解

  • 有些问题很难通过确定性贪心步骤得到最优解,但可以通过在贪心时加入随机因素(不是每次都选最优策略,而是几种较好策略中随机选择一种),来得到近似最优解

  • 当随机次数足够多时,这个近似最优解就会无限逼近最优解这个方法称为随机贪心法,后续会

最优化策略:取石子

每次都选取最大~

取石子(改)

由于条件限制,不能做到每次都拿最多,如果第一次拿3,第二次拿4时,第三次就不能再拿了

不适用贪心,但动态规划可解

最优化策略适用条件

第一,有明确的阶段,且每个阶段的决策都很清晰

  • 阶段一定是按顺序执行的

  • 对于第K(1≤K≤N)个阶段,前K轮的最优决策集合称为局部最优解当K=N时,称为全局最优解

第二,一个阶段的局部最优解,一定是从前面阶段的局部最优解得到的,这个特性称之为最优子结构

  • 例:取石子里,第二轮如果取4,那么无论第三轮取什么,总数一定不是最多。只有第二轮取5(局部最优解)第三轮才有可能产生总数最多的情况

  • 反例:取石子(改)里,第二轮取5是当前最优,但第三轮取4是最优。只有第二轮不取当前最优时,第三轮才能取到最优——不适用贪心法

第三,后面阶段的决策,不会影响到前面阶段的决策,这个特性称为无后效性

  • 例:无论第二轮取哪一堆,都不影响第一轮取的石子

  • 反例:题目修改为“每种数目的石子只能取一次,比如这一次取了5个,下一次就不能再取5个”——后面选择跟前面冲突的话,就需要返回修改之前的选择

最优化策略:分析步骤

1.划分问题的阶段决策

2.验证最优子结构无后效性

3.通过比较和判断,确定每一步的最优策略

例题:机器工厂(USACO)

步骤1:划分阶段和决策

  • 阶段:周数 K(1 ≤K≤ N)

  • 决策:第 K周生产多少台机器

步骤2:验证最优子结构/无后效性

  • 无后效性:满足

  • 因为第 K 周生产几台都不影响第1~K-1周的交付(不可能后面生产的穿越回去交付前面的订单)

  • 最优子结构呢?

局部最优解定义:完成前 K周订单的总成本最小(K=N)时就是全局最优解 在这个定义下,局部最优解一定是刚好满足K周订单需求即可不会额外生产供以后交付,否则会浪费

不满足最优子结构?

步骤2.5:修改决策

  • 问题出在决策:不能只满足本周的需求而不考虑后续需要

  • 反向思考1:本周要交付的机器可以是本周生产,也可以是之前生产

  • 反向思考2:不管前面是哪周生产,成本都可以直接算出来(等于该周生产成本+储藏成本x周数差)

例:前三周每个机器生产成本分别是1,5,6,储藏成本是2

第三周要交付的机器如果在当周生产,成本是6,如果要在第二周生产,成本是5+2x1=7;如果要在第一周生产,成本是1+2x2=5

所以,第三周交付的机器,在第一周生产最省钱

步骤2.5:重新验证最优子结构/无后效性

  • 决策修改为:第K周要交付的机器应该在第几周生产

  • 无后效性仍然满足

  • 最优子结构也满足:前K周总成本最低的情况,一定是从前K-1周总成本最低的情况推出来的

步骤3:最优化策略

  • 对于第K周,计算本周交付的机器在第i(1≤i≤K)周生产并储藏到第K周,分别所需要的成本

  • 选择成本最低的一周,由它来生产第K周需要交付的订单

  • 将这个最低的成本加上前K-1周的最低总成本,得到前K周的最低总成本(局部最优解)。K=N时得到的就是最终答案

虽然问题解决了,但是这个方法的效率还有提升空间

决策时,选择某一成本最低的一周的时候,我们刚刚采用的策略是挨个计算出每一周的成本,从而选择最小的,涉及了很多重复计算,成本的变化是有一定规律的,并不需要每次都进行计算~

步骤3:最优化策略(改进)

直接把时间复杂度降低了一个数量级~时间复杂度对O(n)

代码:机器工厂(C++)

    int n, s; // 声明变量n和s,分别表示总共的星期数和保养一台机器的费用cin >> n >> s; // 输入总星期数和保养费用int p, y, min_p = INT_MAX - s; // 声明变量p、y和min_p,min_p初始化为INT_MAX-s,用来存放当前最小的生产成本long long total = 0; // 声明变量total用来存放总花费for (int i = 0 ;i < n; i++) // 循环n次,表示n个星期{cin >> p >> y; // 输入当前星期生产一台机器的成本p和订单数量ymin_p = min(min_p + s, p); // 对当前最小成本进行更新,考虑了保养费用total += min_p * y; // 计算当前星期的总花费,加上当前最小成本乘以订单数量}cout << total << endl; // 输出总花费return 0;

​​

希望对你有帮助!加油!

若您认为本文内容有益,请不吝赐予赞同并订阅,以便持续接收有价值的信息。衷心感谢您的关注和支持!

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

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

相关文章

沃飞长空总部落地成都高新,为蓉低空经济发展助力!

5月25日&#xff0c;吉利科技集团与成都高新区签署合作协议&#xff0c;吉利科技集团旗下沃飞长空全球总部落地成都高新区。 根据协议&#xff0c;沃飞长空全球总部项目落地成都未来科技城&#xff0c;将布局总部办公、研发和生产制造低空出行航空器等业务。双方将积极发挥各自…

图片去水印工具(低调用哦)

一、简介 1、它是一款专业的图像编辑工具&#xff0c;旨在帮助用户轻松去除照片中不需要的元素或修复照片中的缺陷。无论是修复旧照片、消除拍摄时的不良构图&#xff0c;还是删除照片中的杂乱元素&#xff0c;都能帮助用户快速实现这些目标。其功能强大且操作简单&#xff0c…

【蓝桥杯嵌入式】第十四届省赛 更新中

0 前言 刚刚做完第十四届的省赛&#xff0c;这届题目比我想象中的要简单&#xff1b;不过我去年参加的14届单片机的省赛都比往年的国赛还难&#xff0c;挺离谱的~ 1 展示 1.1 源码 1.2 演示视频 1.3 题目展示 2 CubeMX配置(第十四届省赛真题) 设置下载线 HSE时钟设置 时钟树…

微信小程序-常用的视图容器类组件

一.组件分类 小程序中的组件也是由宿主环境提供的&#xff0c;开发者可以基于组件快速搭建出漂亮的页面结构。 官方把小程序的组件分为了9大类: (1) 视图容器 (2) 基础内容 (3) 表单组件 (4)导航组件 (5) 媒体组件 (6) map 地图组件 (7) canvas 画布组件 (8) 开放能力 (9) 无…

Android Studio中xml预览不显示问题解决办法

具体表现&#xff1a; Android Studio的XML中可以看到视图的相对位置结构&#xff0c;但是看不到具体的模样&#xff0c;全黑&#xff0c;等于半摸黑调UI&#xff08;由于我已经修好了所以没有截图&#xff09;。不是所有的项目都会这样&#xff0c;一部分项目是正常的。 或许…

Sping源码(九)—— Bean的初始化(非懒加载)— getMergedLocalBeanDefinition

序言 前两篇文章介绍了Bean初始化之前的一些准备工作&#xff0c;包括设置BeanFacroty的ConversionService属性以及将Bean进行冻结。这篇文章将会进入到preInstantiateSingletons方法。进一步了解Bean的初始化流程。 preInstantiateSingletons public void preInstantiateSin…

常用的 Git 命令

切換分支 流程 // 查看分支狀態 git status // 保存本分支 git add . // 提交本分支 git commit -m 保存 // 推送到遠程 git push // 切換分支 git checkout BranchName創建新分支流程 // 查看分支狀態 git status // 保存分支內容 git add . // 提交到本地 git commit -m 保…

这个开源的多模态模型无敌。。。

InternVL 由 OpenGVLab 开发&#xff0c;是一个开源的多模态对话模型&#xff0c;其性能接近商业化的 GPT-4V 模型。 GPT-4V 是 OpenAI 去年推出的多模态模型&#xff0c;使用它你可以分析所需的任何类型的图像并获取有关该图像的信息。 1. InternVL 开源模型 而今天的主角研究…

香港苏州商会、香港青年科学家协会博士团参观李良济,加强人才交流,促进科创合作与共赢

近日&#xff0c;香港苏州商会、香港青年科学家协会联合主办的苏港青年科创交流会成功举行&#xff0c;香港青年科学家协会博士团神州行苏州站启动。 5月26日&#xff0c;香港苏州商会及香港青年科学家协会博士团走进李良济&#xff0c;先后参观了李良济中医药文化展厅&#xf…

2024年5月29号PMP每日三题含答案

2024年5月29号PMP每日三题含答案 1.一位团队成员通知项目经理有一个问题可能会破坏项目。项目经理将该问题添加到问题日志中&#xff0c;并要求团队找到解决方案。 项目经理下一步应该怎么做&#xff1f; A.更新风险登记册 B.修订项目管理计划 C.确定适当的风险应对 D.通知干系…

【图论】树的重心

树的重心 删去这一点后每一块中点数最为平均 统计以u为根的子树点数个数&#xff08;加上一个本身&#xff0c;从哪里来的&#xff09;&#xff0c;这里点都是一样的 s846. 树的重心 - AcWing题库 #include <iostream> #include <algorithm> #include <cst…

【Qt之·类QCoreApplication】

系列文章目录 文章目录 前言一、QCoreApplication的概述1.1 QCoreApplication的作用1.2 QCoreApplication在应用程序中的角色和功能1.3 QCoreApplication成员函数 二、QCoreApplication的常用功能2.1 事件循环的概念和作用2.2 处理应用程序事件循环2.3 QCoreApplication如何处理…

16、24年--信息系统工程——软件工程

本章主要靠选择题,4分左右,案例涉及概率不大,论文不会单独考,多看课本原文。 1、架构设计 软件架构为软件系统提供了一个结构、行为和属性的高级抽象,由构件的描述、构件的相互作用(连接件)、指导构件集成的模式以及这些模式的约束组成。软件架构不仅指定了系统的组织架…

前端面试题(14)|求职季面试题分享|答案

1、你知道Xss和Csrf攻击吗&#xff1f; - XSS(跨站脚本攻击)是指攻击者将恶意代码注入到网页中,当用户访问该页面时,恶意代码会在用户的浏览器中执行,从而窃取用户的信息或执行恶意操作。 - CSRF(跨站请求伪造)是指攻击者盗用用户的身份,以用户的名义发送恶意请求,从而执行非法…

Caused by: java.util.ConcurrentModificationException

Caused by: java.util.ConcurrentModificationException 1. 关于 ConcurrentModificationException 报错2. 报错日志3. 代码逻辑doInBackground4. 修改方案5. 方案解析 1. 关于 ConcurrentModificationException 报错 在 Java 中&#xff0c;当尝试在迭代过程中修改对象的结构…

【星海出品】Langchain

Introduction 数学字符大全 | LangChain LLM语言模型 P(Ω1,Ω2,Ω3)N元语法模型:使用统计的方式进行语言模型的建模序列到序列模型(Seq2Seq),采用编码器-解码器的结构设计基于机器学习的语言模型:使用RNN模型进行语言模型的建模使用了 自注意力机制(Self-Attention Me…

游戏联运平台如何助力游戏行业飞速发展?

随着科技的进步和互联网的普及&#xff0c;游戏行业正以前所未有的速度飞速发展。在这个过程中&#xff0c;游戏联运平台凭借其独特的优势和功能&#xff0c;成为了推动游戏行业腾飞的关键力量。本文将探讨游戏联运平台如何助力游戏行业实现飞速发展。 一、游戏联运平台的定义与…

Linux下多线程的相关概念

&#x1f916;个人主页&#xff1a;晚风相伴-CSDN博客 &#x1f496;如果觉得内容对你有帮助的话&#xff0c;还请给博主一键三连&#xff08;点赞&#x1f49c;、收藏&#x1f9e1;、关注&#x1f49a;&#xff09;吧 &#x1f64f;如果内容有误或者有写的不好的地方的话&…

62、 忠北国立大学计算机科学系:FingerNet-专门用于细致MI分类的神经网络模型

本文由泡菜国高校于2024年3月6日发表于arXiv&#xff0c;做了一个专门处理运动想象信号的CNN模型&#xff0c;融合了EEGNet和DeepConvNet。 FingerNet是一种专门用于细致MI分类的网络&#xff0c;利用了时间特征&#xff0c;在相同手部分类任务中表现出比EEGNet和DeepConvNet更…

ts: 类型断言as

类型断言有两种形式 1. 尖括号语法 (value) let someValue: any "this is a string"; let strLength: number (<string>someValue).length;2. as 语法 (value as Type)&#xff1a; let someValue: any "this is a string"; let strLength:…