组合优化学习笔记<之>从贪心算法到子集系统再到拟阵
贪心算法是用的比较多的一种优化算法,因为它过程简洁优美,而且结果有效。有些优化问题如最大权森林(MWF)是可以用贪心问题求解的,由于最小支撑树(MST)问题与MWF是等价的,所以MST也是可以用贪心算法求解。当然,贪心算法不是万能的(对于某些问题贪心算法并不能求得最优解,如旅行商问题(TSP)、最大匹配问题),但并不妨碍人们对它的喜爱。
贪心算法(greedy algorithm)伪代码:
input:一组带权的元素集合E; 一组条件集合C
output:找出集合A⊆E,使得A是满足C的所有E的子集中权值最大的子集
//“集合的权值”定义为:集合中所有元素的权值之和
//“满足C”定义为:满足C中的所有条件。这里设定空集是满足C的。
begin
A = {};
while E!={}
找出E中权值最大的元素,假设该元素是e;
E=E-{e};
if A+e 满足C
A=A∪{e};
end
//注:这里部分采用C语言的运算符定义。
// 即"="表示赋值; "!="表示不等号
从以上描述中可以看出来,过程很简单,可以说是简单暴力的。所以,我们很容易会产生疑问:这样的算法最后得出的解一定是全局最优解吗?
在回答之前,我们要搞清楚的是:当前要解决的问题实例对可行解的定义是什么?换句话说,我们要找的“最优解”是从哪个可行解集中找出来的。即,去掉“最优的”限制条件后,还有哪些条件。那么满足这些条件的所有集合就是可行解集,下一步就是从这个可行解集中找出一个最优的。到这里工作重点已然转化为找一个合适的优化算法。
其次,这个优化问题可以用贪心算法求出最优解吗?答案显然是不一定的。比如,我们要考虑:
(1)若可行解集无限且其权值不收敛,那必然是不能解的。因为这个问题实例本身是没有最优解的。
(2)可行解有限,或者无限但权值收敛的情况下,在以什么样的条件下定义出的可行解集中用贪心算法可以最后得到最优解呢?
先引入一个概念:子集系统
已知集合E={e1,e2,...,en}; I⊆P(E)且I以包含关系封闭。那么称二元组S=(E,I)为子集系统。I中每个成员称为独立集。
//注:P(E)表示E的幂集。
如A={1,2,3,4,5,6},B={{2},{2,4},{4,6},{2,4,6}},则(A,B)是子集系统。
再引入一个概念:拟阵
对于某个子集系统M=(E,I),若能用贪心算法找出I中权值最大的独立集,那么这个子集系统就是拟阵。
看起来似乎问题又绕回去了,没关系,下面3个命题的等价性可以解惑:
命题1:M是拟阵。
命题2:若Ep∈I,Ep+1∈I,且|Ep|=p,|Ep+1|=p+1,则∃e∈Ep+1-Ep,使得 Ep∪{e} ∈ I。
命题3:若A⊆E,且Ep,Ep+1是A的两个极大独立集,则|Ep|=|Ep+1|。
总结:贪心算法有这么多的条件限制,为什么还有这么被爱呢?开头说过了,因为它简洁优美。最关键的是,对于很多甚至说很大一部分问题,我们往往未必需要找出的它的最优解,近似最优已然足够。
参考资料:《组合最优化 算法和复杂性》
组合优化学习笔记<之>从贪心算法到子集系统再到拟阵的更多相关文章
- 机器学习实战(Machine Learning in Action)学习笔记————08.使用FPgrowth算法来高效发现频繁项集
机器学习实战(Machine Learning in Action)学习笔记————08.使用FPgrowth算法来高效发现频繁项集 关键字:FPgrowth.频繁项集.条件FP树.非监督学习作者:米 ...
- 机器学习实战(Machine Learning in Action)学习笔记————07.使用Apriori算法进行关联分析
机器学习实战(Machine Learning in Action)学习笔记————07.使用Apriori算法进行关联分析 关键字:Apriori.关联规则挖掘.频繁项集作者:米仓山下时间:2018 ...
- 机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN)
机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN) 关键字:邻近算法(kNN: k Nearest Neighbors).python.源 ...
- [ML学习笔记] 朴素贝叶斯算法(Naive Bayesian)
[ML学习笔记] 朴素贝叶斯算法(Naive Bayesian) 贝叶斯公式 \[P(A\mid B) = \frac{P(B\mid A)P(A)}{P(B)}\] 我们把P(A)称为"先 ...
- Effective STL 学习笔记 31:排序算法
Effective STL 学习笔记 31:排序算法 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...
- HMM模型学习笔记(前向算法实例)
HMM算法想必大家已经听说了好多次了,完全看公式一头雾水.但是HMM的基本理论其实很简单.因为HMM是马尔科夫链中的一种,只是它的状态不能直接被观察到,但是可以通过观察向量间接的反映出来,即每一个观察 ...
- KVM性能优化学习笔记
本学习笔记系列都是采用CentOS6.x操作系统,KVM虚拟机的管理也是采用virsh方式,网上的很多的文章都基于ubuntu高版本内核下,KVM的一些新的特性支持更好,本文只是记录了CentOS6. ...
- 深挖计算机基础:Linux性能优化学习笔记
参考极客时间专栏<Linux性能优化实战>学习笔记 一.CPU性能:13讲 Linux性能优化实战学习笔记:第二讲 Linux性能优化实战学习笔记:第三讲 Linux性能优化实战学习笔记: ...
- Pandas 性能优化 学习笔记
摘要 本文介绍了使用 Pandas 进行数据挖掘时常用的加速技巧. 实验环境 import numpy as np import pandas as pd print(np.__version__) ...
随机推荐
- 【spring boot】5.spring boot 创建web项目并使用jsp作前台页面
贼烦的是,使用spring boot 创建web项目,然后我再idea下创建的,but 仅仅启动spring boot的启动类,就算整个项目都是好着的,就算是能够进入controller中,也不能成功 ...
- Android 存储(本地存储 SD卡存储 SharedPreference SQLite ContentProvider)
本文出自:http://blog.csdn.net/dt235201314/article/details/73176149 源码下载欢迎Star(updating):https://github.c ...
- List<InvestInfoDO> invest = advertiseDao6.qryInvestInfo(InvestInfoDO1);怎样获得list的实体类;
List<InvestInfoDO> invest = advertiseDao6.qryInvestInfo(InvestInfoDO1); 怎样获得List的实体类呢,就是怎样获得I ...
- VueJS处理逻辑指令:v-if
HTML <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <titl ...
- Spring.net1.3.1+Nhibernate3.0+Mysql/Access/SqlServer/Oracel/SQlite
详情请看我的博文:http://www.ruisoftcn.com/blog/article.asp?id=999
- EasyDarwin开源流媒体云平台之语音对讲功能设计与实现
本文由EasyDarwin开源团队成员Alex贡献:http://blog.csdn.net/cai6811376/article/details/52006958 EasyDarwin云平台一直在稳 ...
- ios上视频与音乐合成后出现播放兼容问题的解决方法
近期EasyDarwin开源流媒体团队EasyVideoRecorder小组同学Carl在支持一款短视频应用上线时,遇到一个问题:我们在IOS上合成"图片+音乐"成为视频之后,在P ...
- [Phoenix] 六、MR在Ali-Phoenix上的使用
摘要: 在云HBASE上利用MR BULKLOAD入库PHOENIX表或通过MR构建PHOENIX索引表. 一.MR在Phoenix上的用途 利用MR对Phoenix表(可带有二级索引表)进行Bulk ...
- 九度OJ 1125:大整数的因子 (大数运算)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:974 解决:494 题目描述: 已知正整数k满足2<=k<=9,现给出长度最大为30位的十进制非负整数c,求所有能整除c的k. ...
- 九度OJ 1123:采药 (01背包、DP、DFS)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2705 解决:1311 题目描述: 辰辰是个很有潜能.天资聪颖的孩子,他的梦想是称为世界上最伟大的医师. 为此,他想拜附近最有威望的医师为师 ...