08-贪婪算法

数据结构和算法
基于《算法图解》—Aditya Bhargava 和《数据结构》—严蔚敏

第8章 贪婪算法

贪婪算法的优点: 简单易行,让每一步都选择局部最优解,最终得到的就是全局最优解。
贪婪算法是近似算法:在获得精确解需要的时间太长时,可以使用近似算法。

判断近似算法优劣的标准如下:

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

8.1 集合覆盖问题
例如解决经典的集合覆盖问题——选择最优的广播电台:
假设办了个广播节目,要让全美50个州的听众都收听得到。为此,需要决定在哪些广播台播出。在每个广播台播出都需要支付费用,因此,要尽可能少的广播台播出。

#首先创建一个列表,包含要覆盖的州
states_needed = set(["mt", "wa", "id", "nv", "ut", "ca", "az"]) #传入一个数组,它被转换为集合。
#创建可供选择的广播台清单,使用散列表表示。
station = {}
station["kone"] = set(["id","nv","ut"]) 
station["ktwo"] = set(["wa","id","mt"])
station["kthree"] = set(["or","nv","ca"])
station["kfour"] = set(["nv","ut"])
station["kfive"] = set(["ca","az"])
#创建一个集合来存储最终选择的广播台。
final_station = set()#计算结果
while states_needed:best_staion = Nonestates_covered = set()for station, states in stations.items():covered = states_needed & states #计算交集if len(covered) > len(states_covered):best_station = stationstates_covered = coveredstates_needed -= states_coveredfinal_stations.add(best_station)
print final_stations

8.2 NP完全问题
Non-deterministic Polynomial的问题,即多项式复杂程度的非确定性问题。

判断NP完全问题的方法:

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

8.3 小结

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

——持续修改完善中…

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

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

相关文章

企业知识库在跨地域团队协作中的价值

随着全球化进程的不断加速,越来越多的企业开始面临跨地域协作的挑战。在这种背景下,企业知识库作为一种重要的知识管理工具,对于提高团队协作效率、促进知识共享与创新具有不可替代的价值。接下来就说一下知识库在跨地域团队协作中的重要性及…

MySQL知识总结(二)基本语句总结

1. 数据库 查看数据库 show databases; 使用数据库 use [数据库名] 如:use mysql 创建数据库 CREATE DATABASE bruce DEFAULT CHARACTER SET utf8 删除数据库 drop database bruce 查询mysql版本 select version(); 查询当前用户 select user(); 显示当前库的所有表…

linux网络编程之地址结构sockaddr和sockaddr_in的区别

1、介绍sockaddr 结构体struct sockaddr在/usr/include/linux/socket.h中定义 struct sockaddr {unsigned short sa_family; // 2 bytes address family, AF_xxxchar sa_data[14]; // 14 bytes of protocol address }; 2、介绍sockaddr_in 结构体stru…

Asp-Net-Core开发笔记:接口返回json对象出现套娃递归问题

前言看了下推送记录,一个月前,OK,我又变成月更了o(╯□╰)o,这绝对不行![○・`Д・ ○]所以今天来更新了其实不是我懒得更新或者是太忙,其实是最近在写一篇很长的博客&…

spring之二——使用maven创建一个java project

2019独角兽企业重金招聘Python工程师标准>>> maven的安装及Eclipse maven插件安装这里不再说了,安装可以看这篇博客: http://www.blogjava.net/fancydeepin/archive/2012/07/13/eclipse_maven3_plugin.html 需要注意的是,maven在w…

自从装了windows神器,再也不用羡慕mac了

1. 命令行神器 1.1 GOW Gow(Gnu On Windows)是Cygwin的轻量级替代品。 它使用一个方便的NSIS安装程序,安装超过100个非常有用的开源UNIX应用程序,编译为本机win32二进制文件。 它被设计为尽可能小,大约18 MB&#xff…

供销大集长期持有_谁是下一个供销大集?(附股)

昨天我们在文章分析了芯片这波行情的几个细节,觉得以芯片股的热点状态还是很健康的,以芯片为首的自主可控还有得玩。今天,这个方向又有了新的变化,结合这些变化,再说说我们的跟踪思路。昨天芯片股出现了高低位切换的现…

linux网络编程之网络字节序、主机字节序、大端、小端

1、主机字节序介绍 不同的CPU有不同的字节序类型 这些字节序是指整数在内存中保存的顺序 这个叫做主机字节序,存储方式有2种 1)、大端模式 大端模式(Big-Endian)就是高位字节排放在内存的低地址端(即该值的起始地址),低位字节排放在内存的高地址端 2 ) 、小端模式 小端存储在…

第1章 绪论

《数据结构》学习笔记 第1章 绪论 1.1 数据结构的研究内容 计算机计算数值时,一般经过一下步骤: 1.从具体问题抽象出数学模型(实质是分析问题)。 2.设计一个解次数学模型的算法。 3.编写程序,进行测试、调试&#xf…

比较规则

比较规则 , EQ, <>, NE, <, LT, >, GT, <, LE, >, GE 非引用数据类型的兼容要求 l 就基本类型来说&#xff0c;需要类型、长度&#xff08;for the types c, n, p, x&#xff09;、小数位&#xff08;for the type p&#xff09;匹配 l 对于结构来说&#…

【转】《从入门到精通云服务器》第六讲—OpenStack基础

前五期的《从入门到精通云服务器》受到了广泛好评&#xff0c;收到留言&#xff0c;有很多读者对云计算相关的技术非常感兴趣。应观众要求&#xff0c;我们这期要安利一条纯技术内容。准备好瓜子、花生&#xff0c;随小编一起进入OpenStack 基础知识大讲堂吧。 了解OpenStack O…

C#中泛型约束的具体用法

前言上一篇博文简单介绍了泛型的约束&#xff0c;说是通过where<>来实现具体委托占位符的约束。那么约束又有什么类型和次序呢。这篇文章咱们一起看看。目前共5种类型的约束。类名&#xff1a;只有这个类型的类或从它继承的类才能用作类型实参class&#xff1a;任何引用类…

python自动注册邮箱_[转][Python][自动登录163邮箱]

#-*- coding:UTF-8 -*-import urllib,urllib2,cookielibimport xml.etree.ElementTree as etree #xml解析类class Login163:#伪装browserheader {User-Agent:Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6}username passwd co…

系统架构:Web应用架构的新趋势 前后端分离的想法

最近研究servlet&#xff0c;看书时候书里讲到了c/s架构到b/s架构的演变&#xff0c;讲servlet的书都很老了&#xff0c;现在的b/s架构已经不是几年前的b/s架构&#xff0c;其实b/s架构就是web应用开发&#xff0c;对于这样的架构我们现在应该考虑的是前端和后端的分离&#xf…

linux网络编程之inet_addr和inet_ntoa使用总结

1、介绍inet_addr函数 inet_addr函数转换网络主机地址(如192.168.1.10)为网络字节序二进制值,如果参数char *cp无效,函数返回-1(INADDR_NONE),这个函数在处理地址为255.255.255.255时也返回-1,255.255.255.255是一个有效的地址,不过inet_addr无法处理 in_addr_t inet_add…

高并发高可靠性系统思考1

CPU不是瓶颈&#xff0c;网络才是&#xff1b; 墨菲定律&#xff1a;任何事情都没表面看起来那么简单&#xff1b;会出错的总会出错&#xff1b; 可靠性&#xff1a; 集群&#xff1a;无状态集群&#xff1b;有状态集群&#xff0c;很难处理&#xff0c;尽量剥离出状态部分做集…

Asp-Net-Core学习笔记:身份认证入门

前言过年前我又来更新了~我就说了最近不是在偷懒吧&#xff0c;其实这段时间还是有积累一些东西的&#xff0c;不过还没去整理……所以只能发以前没写完的一些笔记出来就当做是温习一下啦PS&#xff1a;之前说的红包封面我还没搞&#xff0c;得抓紧时间了最近在准备搞一个我之前…

第1章 大数据挖掘及应用概论

《大数据挖掘及应用》学习笔记。 第1章 大数据挖掘及应用概论 数据挖掘是数据分析的提升。 1.1 大数据智能分析处理的普及和应用 1.1.1 云计算(cloud computing) 云计算是一种按使用量付费的模式&#xff0c;这种模式提供可用的、便捷的、按需的网络访问&#xff0c;进入可配…

python手机自动化截图_python UI自动化截图对比

目前有个想法&#xff0c;就是将UI截图与自动化截图进行对比。不一致的情况下提示错误截图对比方法有&#xff1a;import cv2import numpy as np# 均值哈希算法def aHash(img):# 缩放为8*8img cv2.resize(img, (8, 8))# 转换为灰度图gray cv2.cvtColor(img, cv2.COLOR_BGR2GR…

浮点型数据的输出格式

2019独角兽企业重金招聘Python工程师标准>>> float的占位符为f%,默认输出六位小数&#xff0c;如果要限制位数的输出&#xff0c;可以用%.2f这样的格式&#xff0c;double同上。 如果是浮点型转换成整型不会进行四舍五入&#xff0c;浮点型的输出如果截取了位数进行…