《算法图解》第八章贪婪算法学习心得

《算法图解》——第八章 贪婪算法        第八章    贪婪算法1  简单的贪婪算法每步都采取最优的做法,每步都选择局部最优解。  2  背包问题有些情况下,完美是优秀的敌人。如果你只需要找到一个大致解决问题的算法,贪婪算法挺不错,因为实现容易,结果与正确结果相当接近。练习8.1 你在一家家具公司工作,需要将家具发往全国各地,为此你需要将箱子装上卡车。每个箱子的尺寸各不相同,你需要尽可能利用每辆卡车的空间,为此你将如何选择要... 阅读详情

1、近似算法

近似算法 (approximation algorithm) 。 在获得精确解需要的时间太长时, 可使用近似算法。 判断近似算法优劣的标准如下:

  • 速度有多快;
  • 得到的近似解与最优解的接近程度。

集合覆盖问题算法举例

states_need=set(["mt", "wa", "or", "id", "nv", "ut","ca", "az"])#传入一个数组, 它被转换为集合

#可供选择的广播台清单
stations = {}
stations["kone"] = set(["id", "nv", "ut"])
stations["ktwo"] = set(["wa", "id", "mt"])
stations["kthree"] = set(["or", "nv", "ca"])
stations["kfour"] = set(["nv", "ut"])
stations["kfive"] = set(["ca", "az"])

#最终选择的广播台集合
final_stations=set()
while states_need:
    best_station=None
    states_covered=set()
    for station,states_for_station in stations.items():
        covered=states_need & states_for_station#求交集
        if len(covered)>len(states_covered):
            best_station=station
            states_covered=covered
        states_need-=states_covered
        final_stations.add(best_station)

贪婪算法和精确算法的运行时间比较:


2、NP完全问题

NP完全问题的简单定义是, 以难解著称的问题, 如旅行商问题和集合覆盖问题。 很多非常聪明的人都认为, 根本不可能编写出可快速解决这些问题的算法。

判断NP完全问题:

  • 元素较少时算法的运行速度非常快, 但随着元素数量的增加, 速度会变得非常慢。
  • 涉及“所有组合”的问题通常是NP完全问题。
  • 不能将问题分成小问题, 必须考虑各种可能的情况。 这可能是NP完全问题。
  • 如果问题涉及序列(如旅行商问题中的城市序列) 且难以解决, 它可能就是NP完全问题。
  • 如果问题涉及集合(如广播台集合) 且难以解决, 它可能就是NP完全问题。
  • 如果问题可转换为集合覆盖问题或旅行商问题, 那它肯定是NP完全问题。

3、小结

  • 贪婪算法寻找局部最优解, 企图以这种方式获得全局最优解。
  • 对于NP完全问题, 还没有找到快速解决方案。
  • 面临NP完全问题时, 最佳的做法是使用近似算法。
  • 贪婪算法易于实现、 运行速度快, 是不错的近似算法。

4、练习

  • 你在一家家具公司工作, 需要将家具发往全国各地, 为此你需要将箱子装上卡车。 每个箱子的尺寸各不相同, 你需要尽可能利用每辆卡车的空间, 为此你将如何选择要装上卡车的箱子呢? 请设计一种贪婪算法。 使用这种算法能得到最优解吗?

一种贪婪策略是, 选择可装入卡车剩余空间内的最大箱子, 并重复这个过程, 直到不能再装入箱子为止。 使用这种算法不能得到最优解。

  • 你要去欧洲旅行, 总行程为7天。 对于每个旅游胜地, 你都给它分配一个价值——表 示你有多想去那里看看, 并估算出需要多长时间。你如何将这次旅行的价值最大化? 请设计一种贪婪算法。 使用这种算法能得到最优解吗?

不断地挑选可在余下的时间内完成的价值最大的活动, 直到余下的时间不够完成任何活动为止。 使用这种算法不能得到最优解。

  • 下面各种算法是否是贪婪算法。

快速排序。

不是

广度优先搜索。

是

狄克斯特拉算法。

是

  • 有个邮递员负责给20个家庭送信, 需要找出经过这20个家庭的最短路径。 请问这是一个NP完全问题吗?

是

  • 在一堆人中找出最大的朋友圈(即其中任何两个人都相识) 是NP完全问题吗?

是

  • 你要制作美国地图, 需要用不同的颜色标出相邻的州。 为此, 你需要确定最少需要使用多少种颜色, 才能确保任何两个相邻州的颜色都不同。 请问这是NP完全问题吗?

是



大漠插件找图找字避坑手册:从ziku0.txt字库制作到易语言精准识别(附综合工具实操) 本文深入解析大漠插件在图像识别中的核心难点,提供从ziku0.txt字库精准制作到易语言高效调用的完整避坑指南。重点讲解如何利用大漠综合工具科学设置偏色与二值化参数,生成高质量色彩描述字符串,并分享识别失败的系统排查方法与进阶优化策略,旨在实现99%的稳定识别率。 阅读详情

相关推荐

【AUCell打分】:评估一个基因集在单细胞转录组的每个细胞中特定的活性程度

AUCell使用曲线下面积来计算输入基因集的一个有意义的基因子集是否在每个细胞的表达基因中富集。AUC 分数在所有细胞中的分布允许探索特征的相对表达。由于评分方法是基于排名的,因此 AUCell 与基因表达单位和归一化程序无关。此外,由于细胞是单独评估的,因此可以很容易地应用于更大的数据集。

weixin_40695088的博客 1万+

贪婪算法

贪婪算法很简单:每步都采取最优的做法。【贪婪算法每步都寻找局部最优解,企图以这种方式获得全局最优解。】 贪婪算法并非在任何情况下都行之有效,但它易于实现! 对于NP完全问题,还没有找到快速解决方案。面临NP完全问题时,在获得精确解需要的时间太长时,可使用近似算法(approximation algorithm)。 判断近似算法优劣的标准如下:速度有多快;得到的近似解与最优解的接...

冷月无声的博客 1710

若依框架(ruoyi vue版)集成jeecg积木报表整体完整实用教程(超长篇幅耐心阅读)

若依框架(ruoyi vue版)集成jeecg积木报表整体完整实用教程,主要说明jeecg积木报表的集成、jeecg积木报表嵌入若依菜单、token权限控制,以及iframe嵌入表格等内容。

weixin_53067723的博客 4641

acm 贪心总结

⑴ 有一个以最优方式来解决的问题。为了构造问题的解决方案,有一个候选的对象的集合:比如不同面值的硬币。 ⑵ 随着算法的进行,将积累起其它两个集合:一个包含已经被考虑过并被选出的候选对象,另一个包含已经被考虑过但被丢弃的候选对象。 ⑶ 有一个函数来检查一个候选对象的集合是否提供了问题的解答。该函数不考虑此时的解决方法是否最优。 ⑷ 还有一个函数检查是否一个候选对象的集合是可行的,也

ljtlyy(15网络路婧婷) 713

关于Selenium3在MicrosoftEdge浏览器中出现的问题

前言 最近在做web自动化测试,所用环境是java+selenium3.141.59+MicrosoftEdge(Chromium)浏览器。 在调试的过程中,出现了很多问题。比如selenium3在Edge浏览器中远程调用中,不支持addArguments方法等 问题 1.Edge浏览器弹窗问题 在测试过程中,会出现弹出窗提示 ...

zhucheng1994的博客 2196

从AI画稿到3D虚拟时装:Illustrator与Substance 3D的服装设计工作流

本文旨在解决传统服装与纺织品设计师在产品开发流程中,面临的“2D印花图案无法直观预见3D上身效果”、“物理打样成本高昂且周期漫长”的核心痛点。我们将介绍一套纯数字化的3D可视化工作流,核心是利用 Adobe Illustrator 进行矢量印花图案创作,通过 Adobe Substance 3D Sampler 将其转化为逼真的PBR(基于物理渲染)布料材质,并最终在 Adobe Substance 3D Stager 中,将该材质应用于3D服装模型,渲染出照片级的虚拟样衣。本指南将帮助设计师以极低的成本和

Kingsdesigner的博客 1397

算法教给我的人生道理-贪婪算法

算法教给我的人生道理-贪婪算法 在有些情况下,完美是优秀的敌人 最近在自学《算法图解》,真是一本很棒的入门书,更是教给我一些人生道理。 背包问题提到了贪婪算法,当背包能拿的东西有限时,就优先拿能装进背包的价值最大的那个就好了。尽管不一定是最优解,却是个优秀的近似解。顿时豁然开朗。 ”在有些情况下,完美是优秀的敌人。有时候,你只需找到一个能够大致解决问题的算法,此时贪婪算法正好可派上用场,因为它们实现起来很容易,得到的结果又与正确结果相当接近。“真是点醒了人生。 案例介绍 假设你是个贪婪的小偷,背着可装35磅

weixin_40812052的博客 676

Android 15.0 Launcher3中去掉Hotseat功能实现

在15.0系统产品定制化开发中,在Launcher3的定制化需求也是特别多的,由产品是小屏幕的产品,所以产品需求Launcher3 页面布局的原因,要求Launcher3 需要去掉Hotseat 不显示Hotseat下面几个图标,而做满屏app的显示,从而达到美观的效果,下面就来分析去掉Hotseat从而实现这个功能

安卓兼职framework和app工程师的博客 555

《算法图解》(第八章 贪婪算法)Python3 学习笔记习题&代码

目录 第八章 贪婪算法 8.1 教室调度问题 8.2 背包问题 练习1 8.3 集合覆盖问题 近似算法 代码 练习2 8.4 NP 完全问题 8.4.1 旅行商问题详解 8.4.2 如何识别NP 完全问题 练习3 8.5 小结 第八章 贪婪算法 学习如何处理不可能完成的任务:没有快速算法的问题(NP完全问题)。 学习识别NP完全问题,以免浪费时间去寻找解决它们的快速算法。 学习近似算法,使用它们可快速找到NP完全问题的近似解。 学习贪婪策略——一种非常简...

Amberrr的博客 1334

【机器学习-09】特征工程

特征工程是机器学习模型构建的初步工作,但它的重要性却贯穿整个模型生命周期。在进行特征工程时,我们需要充分利用数据科学的知识和技巧,结合具体的应用场景和业务需求,来制定出最合适的特征提取和转换策略。只有这样,我们才能为机器学习模型提供最有价值的输入,从而使其发挥出最大的潜力。总之,特征工程是机器学习中的一项关键任务,它需要我们用心去探索、去实践、去创新。只有不断地优化和完善特征工程的过程,我们才能构建出更加准确、更加可靠的机器学习模型,为实际应用带来更大的价值。

qq_38614074的博客 2万+

面向 OData V4 的 Fiori elements 为何强制使用 draft、它到底是什么、以及是否能关闭

本文深入解析了SAP Fiori elements中draft handling的核心机制与必要性。关键点包括:1)draft机制通过中间版本实现复杂编辑的安全恢复与并发控制;2)Fiori elements for OData V4强制要求draft-enabled服务支持事务编辑;3)非draft服务仅适用于只读场景;4)替代方案需承担完全自定义开发的成本。文章基于SAP官方文档,系统阐述了draft在事务型应用中的基础性作用,为架构决策提供了明确指导。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 267

《算法图解》第八章 贪婪算法

第八章 贪婪算法 目录 8.1教室调度问题 8.2背包问题 8.3集合覆盖问题 近似算法 8.4NP-Hard完全问题 8.4.1旅行商问题详解 8.4.2如何识别NP-hard完全问题 8.5小结 8.1教室调度问题 有很多门课,上课的时间和时长可能会交叉,那要怎么安排在某间教室的课程安排,且最大程度利用好这间教室呢? ---按课程时间选出不冲突的,比如9:00--10:

心旷神怡 1767

Mathematica 训练课(12)常用注释方法

Mathematica从入门到进阶

qq_25018077的博客 9075

算法图解第八章笔记与习题(贪婪算法)

算法图解第八章笔记与习题(贪婪算法) 文章目录算法图解第八章笔记与习题(贪婪算法)8.1 贪婪算法8.2 集合覆盖问题8.3 NP完全问题8.3.1 旅行商问题:8.3.2 如何识别NP完全问题8.4 小结练习习题8.1:习题8.2:习题8.3-5题干:习题8.3:习题8.4:习题8.5:习题8.6:习题8.7:习题8.8: 算法图解pdf百度云链接,提取码:jttg 8.1 贪婪算法 贪婪算法...

hwl19951007的博客 1672

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

巴尔加瓦算法图解——第八章 贪婪算法(上)

对不住,虽然我知道没有人看,那就说对不住作为观众的自己吧。这段时间精神状态非常不好,学习的东西没有以前多了。不过我还是要继续更新。只要我还更新着,说明人还有点生气。我自己会原谅自己的。

Welcome to my homepage 1081

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

❤️集合覆盖和NP完全问题❤️ 算法图解:第八章:贪婪算法

假如你办了个广播节目,要让所有的州的听众都能听到。在每个广播台播出都需要收费,因此你要保证尽可能少的广播可以播出,每个广播台都覆盖特定区域,不同的广播台覆盖区域可能会重叠。 如何找出覆盖所有州的广播台集合呢?我们可以采用贪婪算法。

拥有百余位万粉技术博主、200余位可合作代发博主,私域技术社群规模达千人,商务合作私信 8074

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

巴尔加瓦算法图解——第八章 贪婪算法(全局最优)(下)

❑贪婪算法寻找局部最优解,企图以这种方式获得全局最优解。 ❑对于NP完全问题,还没有找到快速解决方案。 ❑面临NP完全问题时,最佳的做法是使用近似算法。 ❑贪婪算法易于实现、运行速度快,是不错的近似算法。

Welcome to my homepage 1096

读书笔记 《算法图解》第八章 贪婪算法

读书笔记 《算法图解》第八章 贪婪算法 8.1教室调度问题 emmm很显而易见是 美术 + 数学 + 音乐 连着上三堂课不会吐吗 贪婪算法就是 每步都是最优解 最终达到全局最优解 8.2贪婪算法并不总对 —— 背包问题 假设你是个小偷你要偷东西,按贪婪算法来说: 此时的最优解应该是 电脑 + 吉他 = 3500 > 3000 不过呢 其实也差不多 所以在很多时候 完美是优秀的敌人 用个...

weixin_44383328的博客 331

算法图解:第八章 贪婪算法

这两个问题的共同之处:要计算所有的解,并找出最小或最短的那个。集合覆盖问题:一个节目让全美50个州都听到,找能覆盖50个州的最少广播台集合。2.用散列表表示广播台清单,key为广播台,value为覆盖的州。3.不能将问题分成小问题,必须考虑各种可能,可能是NP完全问题。1.先创建一个覆盖所有州的列表,再转为集合,集合可自动去重。#遍历所有广播台,选择最多覆盖了最多的未覆盖的广播台。2.涉及所有组合的问题,一般是np完全问题。1.选出一个广播台,覆盖最多未覆盖的州。2.重复第一步,直到覆盖了所有的州。

m0_53842576的博客 469

《算法图解》第八章之贪婪算法

目录 教室调度问题​ 集合覆盖问题​ 背包问题​ 如何识别 NP 完全问题 小结 NP完全问题 一、时间复杂度 二、多项式时间或多项式复杂度 三、P型问题与NP型问题 四、NPC问题(NP完全性问题、NP完全问题) 五、后话 示例代码 Python C# Java JS 教室调度问题 很多人都跟我说,这个算法太容易、太显而易见,肯定不对。但这正是贪婪算法的优点...

moonlightpeng的博客 2492

《算法图解》第八章_贪婪算法_集合覆盖问题

一、贪婪算法介绍 算法基本思路:从问题的某一个初始解出发一步一步地进行,根据某个优化测度,每一步都要确保能获得局部最优解。每一步只考虑一个数据,他的选取应该满足局部优化的条件。若下一个数据和部分最优解连在一起不再是可行解时,就不把该数据添加到部分解中,直到把所有数据枚举完,或者不能再添加算法停止。(摘自 贪婪算法_百度百科) 简单直接的描述,就是指每步都选择局部最优解,最终得到的就是...

542

笔记:《算法图解》第八章:NP完全问题、近似算法之贪婪算法

1.NP完全问题(Non-deterministic Polynomial Complete) NP完全问题(多项式复杂程度的非确定性问题)的简单定义是,以难解著称,没有快速算法的问题,如旅行商问题和集合覆盖问题。 要判断问题是不是NP完全问题很难,易于解决的问题和NP完全问题的差别通常很小。 为避免浪费时间去寻找解决它们的快速算法,如何识别NP完全问题: ❑ 元素较少时算法的运行速度非常快,但随...

余欲与鱼语渔 2203

[笔记]《算法图解》第八章 贪婪算法

贪婪算法 贪婪算法很简单:每步都采取最优的做法。你每步都选择局部最优解,最终得到的就是全局最优解。 贪婪算法并非在任何情况下都行之有效。 近似算法 在有些情况下,完美是优秀的敌人。有时候,你只需找到一个能够大致解决问题的算法,此时贪婪算法正好可派上用场,因为它们实现起来很容易,得到的结果又与正确结果相当接近。 判断近似算法优劣的标准如下: 1.速度有多快 2.得到的近似解和最优解的接近...

dideng8675的博客 171

算法图解第八章贪婪算法

贪婪算法:每步的局部最优解,可能是全局最优解。 问题1:有几个广播台,每个广播台都覆盖特定的区域,不同的广播台的覆盖区域可能重叠。找出覆盖全美50个州的最小广播台集合。 1)选出这样一个广播台,即它覆盖了最多的未覆盖州。即便这个广播台覆盖了一些已覆盖的州,也没有关系。 2)重复第一步,直到覆盖了所有的州。 这个实例中,贪婪算法的时间复杂度为o(n^2) python中集合类似于列表,只是...

西祠梧桐的博客 357

算法图解-Python(第八章:贪婪算法)

题目: 假设你办了个广播节目,要让全美50个州的听众都收听得到。为此,你需要决定在哪些广播台播出。在每个广播台播出都需要支付费用,因此你力图在尽可能少的广播台播出。现有广播台名单如下。 每个广播台都覆盖特定的区域,不同广播台的覆盖区域可能重叠。 如何找出覆盖全美50个州的最小广播台集合呢? 贪婪算法解题方法如下(Python): # 贪婪算法 ''' 假如你办了个广播节目,要让全美50个州的听众都收听的到。为此,你需要决定在哪些广播台播出。在每个广播台播出都需要支付费用,因此你力图在尽可能少的广播台播出。

Baron_wu的博客 2550

算法图解

注:此文主要用于《算法图解》一书各章节知识点概述。 第一章: 二分查找算法O(logn) 算法程序: 简单查找算法O(n) 大O运行时间: O(logn) < O(n) < O(nlogn) < O(n²) < O(n!) 先排序,再查找 第二章: 数组:适用于读取很多 读取O(1) 插入O(n) 删除O(n) 链表:适用于插入很多 读取O(n) 插入O(1)...

Steve_Kung的博客 1186
上一篇: 《算法图解》第七章迪克斯特拉学习心得
下一篇: 《算法图解》第九章动态规划学习心得
gxls2024
博客等级 码龄9年 1079粉丝 166原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gxls2024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值