本文有若干公式,手机显示可能比较凌乱,建议用电脑查看
本文介绍一种针对submodular问题的基于Greedy的随机算法:Stochastic-Greedy。

算法来自AAAI2015的一篇论文 Lazier Than Lazy Greedy ,第一作者是来自ETH ZurichBaharan Mirzasoleiman

Submodular问题

Submodular是集合函数的一个非常常见的性质(类似于经济学中的边际效用递减)。
关于Submodular,wiki给出了三个等价定义(这里提一下,具体参考wiki上关于submodular的定义和解释):
如果 Ω \Omega 是一个有限集合,一个Submodular函数是 2Ω 2^\Omega到 R R的一个函数,满足如下三个等价定义
- ∀X,Y⊆Ω,X⊆Y,x∈Ω∖Y ⇒f(X∪{x})−f(X)≥f(Y∪{x})−f(Y)\forall X, Y \subseteq \Omega, X \subseteq Y, x \in \Omega \setminus Y ~\Rightarrow f(X \cup \{x\})-f(X) \geq f(Y \cup \{x\})-f(Y)
- ∀S,T⊆Ω ⇒ f(S)+f(T)≥f(S∪T)+f(S∩T) \forall S, T \subseteq \Omega ~\Rightarrow~ f(S)+f(T) \geq f(S\cup T) + f(S\cap T)
- ∀X⊆S,x1,x2∈Ω∖X ⇒ f(X∪{x1}+f(X∪{x1}≥f(X∪{x1,x2}+f(X) \forall X \subseteq S, x_1,x_2 \in \Omega \setminus X ~\Rightarrow~ f(X\cup \{x_1\} + f(X\cup \{x_1\} \geq f(X\cup \{x_1, x_2\} + f(X)

约束最优化submodular问题

现在我们需要解决这样一个问题,已知一个具有submodular性质的函数 f f,求这个函数的最小值,并且还满足一定的约束条件,形式化表达为

argmaxA:|A|≤kf(A)

\text{argmax}_{A:|A|\leq k} f(A)这是一个NP难的问题,用greedy方法求得的最优解可以达到 1−1/e 1-1/e的精度(即求得的最优 f f于真实的最优f∗f^*的比值不小于 1−1/e 1-1/e)

Greedy算法

对于约束最优化submodular问题,我们的目标是找到一个元素个数不大于 k k的集合AA,使得 f(A) f(A)尽可能的大。
设全集为 V V,Greedy算法的思路就是初始的AA为空集,每次从 V−A V-A中找到能够使得 f(A) f(A)增长最大的一个元素(即 e∈V−A e \in V-A 使得 f(A∪{e}) f(A\cup \{e\})最大)。这样进行 k k次,Greedy算法得到了大小为kk的近似解 A A。
显然,Greedy 算法的时间复杂度(计算ff的次数)为 O(nk) O(nk)。

Stochastic-Greedy算法

类似Greedy算法,Stochastic-Greedy算法也是每次找到能够使得 f(A) f(A)增长最大的一个元素。与Greedy不同的是,Stochastic-Greedy不是从 V−A V- A 遍历地找,而是从 V−A V- A 中随机采样出一个子集 R R,遍历 RR 查找。
如果 R R 的大小设为 nklog1ε\frac{n}{k}log \frac{1}{\varepsilon},那么Stochastic-Greedy 算法可达到 1−1/e−ε 1-1/e-\varepsilon的近似程度。
Stochastic-Greedy 算法的时间复杂度是 O(n) O(n)

Lazy-Greedy加速

Lazy Greedy是对Greedy的一种加速策略,也可以用来加速Stochastic-Greedy。但是并不会改变Greedy / Stochastic-Greedy的复杂度。
举个例子:现在已经由Greedy算法从大小为 i−1 i-1的集合 Ai−1 A_{i-1}找到了一个大小为 i i的集合AiA_i,现在我们要在 V−Ai V- A_i中找到一个元素,使得 f(Ai∪{e}) f(A_i\cup \{e\})最大,Greedy的策略是遍历所以的 e∈V−Ai e\in V- A_i,计算 f(Ai∪{e}) f(A_i\cup \{e\}),求得最大值。而Lazy策略用了一个技巧,使得不一定要遍历所有的元素。
如果 f(Ai∪{e})−f(Ai)>f(Ai−1∪e′)−f(Ai−1) f(A_i\cup \{e\}) - f(A_i) > f(A_{i-1}\cup e') - f(A_{i-1}),而根据Submodular性质, f(Ai−1∪e′)−f(Ai−1)≥f(Ai∪e′)−f(Ai) f(A_{i-1}\cup e') - f(A_{i-1}) \geq f(A_{i}\cup e') - f(A_{i}),从而 f(Ai∪{e})−f(Ai)>f(Ai∪e′)−f(Ai) f(A_i\cup \{e\} )- f(A_i) > f(A_{i}\cup e') - f(A_{i}),即 f(Ai∪{e})>f(Ai∪e′) f(A_i\cup \{e\}) > f(A_{i}\cup e'),也就是说,在某些情况下,我们可以不用计算 f(Ai∪e′) f(A_{i}\cup e')就可以比较 f(Ai∪{e}) f(A_i\cup \{e\})与 f(Ai∪{e′}) f(A_i\cup \{e'\})的大小。Lazy Greedy就是根据这一性质加速Greedy算法的。
对于 V V中每一个元素ee,我们维护一个上界表 ρ(e) \rho(e),初始值为正无穷。
在Lazy-Greedy的第i轮,我们进行这样的操作,首先,对所有的还没有选择的 e∈V−Ai−1 e \in V - A_{i-1},对 ρ(e) \rho(e)降序排序。对于最大的 ρ(e) \rho(e),我们更新它 ρ(e)=f(e∪Ai−1)−f(Ai−1) \rho(e)=f(e\cup A_{i-1})-f(A_{i-1})。如果此时 ρ(e) \rho(e)仍然比剩下的 ρ(e′) \rho(e')都大,那么由Submodular性质,此时应该选择的元素就是 e e,此时跳出第i轮,进行下一轮。否则,找到此时最大的元素,依然进行如上的更新、比较操作。以此类推。如果所有的元素都更新完了。那么,这就相当于把所有的f({e}∪Ai1)f(\{e\}\cup A_{i_1})计算了一遍。这时这一轮的计算量就和Greedy一样了。所以说Lazy在大O的意义下不改变复杂度。

理论部分

随机的Lazy-Greedy:lazier than lazy greedy相关推荐

  1. Swift - lazy 修饰符和lazy 方法

    延时加载或者说延时初始化是很常用的优化方法,在构建和生成新的对象的时候,内存分配会在运行时耗费不少时间,如果有一些对象的属性和内容非常复杂的话,这个时间更不可忽略.另外,有些情况下我们并不会立即用到一 ...

  2. java bean lazy proxy_java – Hibernate @Proxy(lazy = false)注释做什么...

    在尝试序列化作为JPA实体的ESRBRating对象时,我遇到了两个不同的堆栈跟踪(见下文).我正在使用Spring Data JPA.控制器调用服务,称为存储库的服务.我能够通过在我的ESRBRat ...

  3. 分享给你——2017我学到的方法论

    1.啦啦啦--初衷 可能是因为之前在QQ空间发的说说都偏向正能量,用词都是一些比较励志型的言语,所以同学们经常说: "戴老板优秀"(奉承而已,我明白,嗯) "戴老板心灵鸡 ...

  4. codeforces1440 E. Greedy Shopping

    昨天晚上做完4题还有30分钟,感觉太晚了就没继续写,不过看了下E题感觉是一个线段树题目,今天中午看了看发现就是一个线段树上递归的询问问题,不过我之前没写过但是靠着日益强大的乱写能力竟然水出来了~~ E ...

  5. 6.S081 Xv6 Lab 5: lazy page allocation

    Lab: xv6 lazy page allocation https://pdos.csail.mit.edu/6.S081/2020/labs/lazy.html 新的 2020 版哦. $ gi ...

  6. 线段树 ---- 线段树上区间二分 或者单点二分 codeforces C. Greedy Shopping

    题目大意 题目大意: 给你一个非增的区间现在你有两次操作 1 x y : 把[a1,...ax][a_1,...a_x][a1​,...ax​]里面的数对yyy取maxmaxmax 2 x y : 你 ...

  7. Hibernate之lazy延迟加载

    2019独角兽企业重金招聘Python工程师标准>>> 一.延迟加载的概念 当Hibernate从数据库中加载某个对象时,不加载关联的对象,而只是生成了代理对象,获取使用sessio ...

  8. 机器学习中的lazy method与eager method的比较

    一 分类方法 机器学习的算法进行分类的时候,一般是根据是否有监督分为:无监督学习,有监督学习,半监督学习.有时候会再加上强化学习(Reinforcement learning). 但是,根据算法的原理 ...

  9. 【Spring注解系列03】@Scope与@Lazy

    1.@Scope与@Lazy @Scope 对象实例作用域,默认是单实例的. 取值有四个: /*** @see ConfigurableBeanFactory#ConfigurableBeanFact ...

最新文章

  1. php 长连接心跳_支持gRPC长链接,深度解读Nacos2.0架构设计及新模型
  2. python生成试卷制卷系统_Python 读写文件 小应用:生成随机的测验试卷文件
  3. 零基础入门NLP - 新闻文本分类
  4. InfluxDB:cannot use field in group by clause
  5. UOJ #35. 后缀排序 后缀数组 模板
  6. 以太网数据帧的报尾封装字段是什么_利用TCP/IP模型理解数据通信过程
  7. 升级进度卡住_升级 iOS 系统时卡住怎么办?
  8. 338. Counting Bits_比特位计数_简单动态规划
  9. Condition接口详解
  10. redis cluster搭建
  11. Win10/Win7小技巧:教你如何彻底关闭系统进程
  12. python培训一般多久_零基础学python需要多久
  13. 团队管理(3)---如何成为一名优秀的管理者
  14. java实例变量,局部变量,类变量和final变量
  15. windows7远程桌面设置
  16. 深度学习导论 - 读李宏毅《1天搞懂深度学习》
  17. 良基、归纳法、动态规划
  18. 一篇文章带你更好了解热门Java开发工具IDEA!
  19. 微分,泰勒公式及其在图像处理中的应用
  20. 什么是A.B.C类网络 怎么区别和划分

热门文章

  1. 常用的web服务器软件整理
  2. google instant
  3. Arduino IDE环境下WeMos D1开发板引脚定义和映射
  4. 2016年,网络程序设计,ustc se,SA16225161,梁昱森
  5. 权限管理模型 ---- ACL、RBAC和ABAC(详解)
  6. Win10 专用字符编辑程序 新增字拷贝到另一台电脑上
  7. SSM框架和SSH框架的详细对比
  8. C语言 输入n,输出n各位数字之和
  9. 游戏引擎与游戏开发入门介绍
  10. word的奇葩功能--隐藏文字