判断大小简单算法_优化 | 贪婪算法有多好?Submodularity告诉你
文章作者:乔杰
责任编辑:苏向阳
本文转载自知乎专栏 贪婪算法有多好?Submodularity告诉你
原文链接:https://zhuanlan.zhihu.com/p/52512602
文章发表于微信公众号【运筹OR帷幄】:优化 | 贪婪算法有多好?Submodularity告诉你欢迎原链接转发,转载请私信@运筹OR帷幄获取信息,盗版必究。
敬请关注和扩散本专栏及同名公众号,会邀请全球知名学者发布运筹学、人工智能中优化理论等相关干货、知乎Live及行业动态
更多精彩文章,欢迎访问我们的机构号:@运筹OR帷幄
作者:乔杰
乔杰,广东工业大学计算机专业的博士在读。主要研究方向是因果关系,个人博客
https://blog.csdn.net/a358463121
编者按:
贪婪算法可以说是一种非常直观的算法了,但是直观并不代表容易,也不代表没有深度。本文就将带你深入了解一下贪婪算法的应用。
贪婪算法可以说是最符合我们人类直觉的算法了,甚至有的时候贪婪算法就可以得到目标的最优解,比如说最小生成树算法。那么我们自然就会想知道,它能达到最优值吗?如何判断?实际上一个叫Matroid的东西是可以帮助我们判断是否能达到最优值的。但是如果不能达到最优,它到底有多近似呢?submodularity optimization对这个问题给予了一个答案。
submodularity condition
submodularity
对于同一个地方,在雷达覆盖范围比较小的时候加入一个雷达(左图),它的效果肯定比在雷达覆盖范围比较大的时候加一个雷达的效果要好(右图)。基于此我们可以给出一个定义:
接下来再介绍几个有用的性质,submodular函数的求和还是submodular函数,submodular函数的加权求和(权重非负)也还是submodular函数。这个性质让我们可以定义一些很简单的submodular函数,然后把他们加起来组成一个复杂的函数。
现在你的函数有了这两个性质,而且任务找到一个大小为k的子集S使得f达到最大,那么不同大小的k会造成什么影响呢?该理论的一个漂亮的地方是,如果你函数有Submodularity和Monotonicity这两个性质那么至少63%的效果是可以保证的。当然在实际中,常常可以高于这个值。以下定理给出了该描述的一个正式证明,该函数在使用贪婪算法,每一步都选择一个最优的元素来最大化f时,他一定能得到一个1-1/e(63%)的近似。为了证明这个bound,我们给出几个定义以及一些有用的定理。
Matroid Constraint
那么什么时候,贪婪算法可以得到最优解呢?答案是,如果我们在搜索子集的时候,搜索空间中所有的子集都是“独立”的,那么我们是有可能用贪婪算法找到最优解的。而Matriod定义了这么一种独立的性质.
想要进一步了解可以访问以下参考资料。
参考资料
When Greedy Algorithms are Good Enough: Submodularity and the (1 – 1/e)-Approximation
(https://jeremykun.com/2014/07/07/when-greedy-algorithms-are-good-enough-submodularity-and-the-1-1e-approximation/)
When Greedy Algorithms are Perfect: the Matroid
(https://jeremykun.com/2014/08/26/when-greedy-algorithms-are-perfect-the-matroid/)
Notes on Greedy Algorithms for Submodular Maximization
(https://thibaut.horel.org/submodularity/notes/02-12.pdf)
Submodular Function Maximization
(https://las.inf.ethz.ch/files/krause12survey.pdf)
更多精彩文章欢迎关注我们的机构号@运筹OR帷幄
判断大小简单算法_优化 | 贪婪算法有多好?Submodularity告诉你相关推荐
- 判断大小简单算法_算法浅谈——人人皆知却很多人写不对的二分法
本文首发于公众号:TechFlow 1 二分法可以说是鼎鼎大名,哪怕是没有学过编程的同学,也许说不上来二分法这个名字,但是对于其中的精髓应该都是有所了解的.不了解的同学也没关系,我一句话就能交代清楚: ...
- 判断大小简单算法_JVM GC算法
在判断哪些内存需要回收和什么时候回收用到GC 算法,本文主要对GC 算法进行讲解. JVM垃圾判定算法 常见的JVM垃圾判定算法包括:引用计数算法.可达性分析算法. 引用计数算法(Reference ...
- java 堆大小的最大值_优化Java堆大小的5个技巧
优化Java堆大小的5个技巧 摘要:Java堆容量不足可以对性能造成很大影响,这样无疑就给程序带来不可必要的麻烦,本文总结了影响Java堆容量不足的五大原因以及巧妙地去优化? 本文作者Pierre是一 ...
- JAVA 判断简单密码算法_十道简单算法题二【Java实现】
前言 清明不小心就拖了两天没更了-- 这是十道算法题的第二篇了-上一篇回顾:十道简单算法题 最近在回顾以前使用C写过的数据结构和算法的东西,发现自己的算法和数据结构是真的薄弱,现在用Java改写一下, ...
- java的简单算法题_[2]十道算法题【Java实现】
前言 清明不小心就拖了两天没更了-- 这是十道算法题的第二篇了-上一篇回顾:十道简单算法题 最近在回顾以前使用C写过的数据结构和算法的东西,发现自己的算法和数据结构是真的薄弱,现在用Java改写一下, ...
- 基于并行思想的简单算法优化(最值,排序)
并行算法(Parallel Algorithm)是计算机科学中一门单独的分支,由于本人水平有限,时间有限,只大致了解了并行算法的基本模型以及几个常见算法的优化改进,下面以(1)求序列最大值 (2)归并 ...
- louvian算法 缺点 优化_机器学习中的优化算法(1)-优化算法重要性,SGD,Momentum(附Python示例)...
本系列文章已转至 机器学习的优化器zhuanlan.zhihu.com 优化算法在机器学习中扮演着至关重要的角色,了解常用的优化算法对于机器学习爱好者和从业者有着重要的意义. 这系列文章先讲述优化算 ...
- a - 数据结构实验之串一:kmp简单应用_中高级面试必备:快速入门数据结构和算法
一 前言 1 为什么要学习算法和数据结构? 解决特定问题. 深度优化程序性能的基础. 学习一种思想:如何把现实问题转化为计算机语言表示. 2 业务开发要掌握到程度? 了解常见数据结构和算法,沟通没有障 ...
- 算法组合 优化算法_算法交易简化了风险价值和投资组合优化
算法组合 优化算法 Photo by Markus Spiske (left) and Jamie Street (right) on Unsplash Markus Spiske (左)和Jamie ...
最新文章
- YOLO、SSD、FPN、Mask-RCNN检测模型对比
- RIP协议的问题解决方案
- 软件工程的实践项目课程的自我目标
- touch: cannot touch /usr/local/tomcat/logs/catalina.out: Permission denied解决方法
- 724 Find Pivot Index
- nginx ci index.php,CI在Nginx服务器上rewrite去掉index.php例子
- git学习(八)pull,fetch,merge
- Ubuntu16.04安装(QQ.exe)
- 局域网计算机维护工具,局域网共享工具,教您局域网共享工具
- 花书笔记2——线性代数 线性组合Ax = b的解 线性相关/线性无关 举例说明 简单易懂
- 使用Silvaco设计构建NMOS晶体管、PNP、NPN双极型晶体管并提取各项工艺及器件参数:半导体器件和工艺模拟
- 海康威视-海康门禁设备对接SDK-已完成完整封装调用
- Android 身份证拍照 识别 文字识别 (百度)
- LayoutInflater 总结
- 操作系统安装磁盘清理方法
- vue,el-image 图片引入根路径@无效
- 创业公司天使轮、A轮、B轮……IPO融资时如何分配股权?
- 为什么Excel公式使用不了?
- 人大金仓(kingbase8)安装与初始化超详细教程
- 关于机房环境监控温湿度检测!
热门文章
- web 小程序 ch4 小程序组件
- 数字图像处理与Python实现笔记之频域滤波
- Eclipse自动生成返回值对象与补全与加注释
- java: 找不到符号 符号: 方法 setOperation(java.lang.String) 位置: 类型为.......
- OpenFeign入门神级篇,字里行间透露出一种睥(pi)睨天下的气势,你还不首当其冲?
- Docker操作容器2
- 十大经典排序算法之快速排序及其优化
- JPA中实现查询list
- 日志 查看匹配内容的前后几行
- Spring-学习笔记04【Spring的常用注解】