本文有若干公式,手机显示可能比较凌乱,建议用电脑查看
本文介绍一种针对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. QIIME 2教程. 16纵向和成对样本比较q2-longitudinal(2021.2)
  2. 108页报告一文看懂光刻机,看国产替代如何破局【附下载】
  3. Replication--镜像+复制
  4. Android 图像合成技术Xformodes图片剪裁
  5. [NOIP2018模拟赛10.19]只会暴力报告
  6. 如何使用 AutoPilot 对作业自动调优?
  7. CodeForces - 1312C Adding Powers(思维+位运算)
  8. 浅谈socket网络编程函数参数(一)
  9. Spring IOC原理总结
  10. ioctl(), ioctl_socket()
  11. sql azure 语法_如何将内部SQL Server数据库迁移到Azure
  12. 告别低效扫码, Barcode Reader高效解决你批量扫码的困扰
  13. 这40个自学网站,一年让你“白捡”十几万,快点收藏
  14. 楚留香服务器维护时间,2019年8月9日官方维护公告
  15. html select 选中触发,实现select中指定option选中触发事件
  16. Python迎来30岁生日,先驱Pablo Galindo:没想到Python这么流行
  17. GIGABYTE 技嘉主板进不了 BIOS 的解决方案
  18. 基于51单片机的温度湿度采集系统
  19. charAt(i) 呵 charAt(i)-‘0‘的 区别
  20. 案例:京东登录页面css创建

热门文章

  1. python中strip的用法
  2. 蜗牛爬墙墙高10米C语言,蜗牛爬墙——打破小朋友的数学思维模式
  3. c++ 操作Word
  4. Storm_Storm主要特点
  5. 快速对比两张工作表数据差异——《超级处理器》应用
  6. 基于HTML的环境网站设计 HTML+CSS环保网站项目实现 带设计说明psd
  7. android 判断App进程是否存在,处在前台,后台,前后台切换,service是否运行,设置为系统app
  8. 因特网、万维网、互联网区别
  9. 解决无法从公司 Maven 私服下载依赖的问题
  10. 三种数据库的 SQL 注入详解