贪心算法是用的比较多的一种优化算法,因为它过程简洁优美,而且结果有效。有些优化问题如最大权森林(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|。

  总结:贪心算法有这么多的条件限制,为什么还有这么被爱呢?开头说过了,因为它简洁优美。最关键的是,对于很多甚至说很大一部分问题,我们往往未必需要找出的它的最优解,近似最优已然足够。

参考资料:《组合最优化 算法和复杂性》

组合优化学习笔记<之>从贪心算法到子集系统再到拟阵的更多相关文章

  1. 机器学习实战(Machine Learning in Action)学习笔记————08.使用FPgrowth算法来高效发现频繁项集

    机器学习实战(Machine Learning in Action)学习笔记————08.使用FPgrowth算法来高效发现频繁项集 关键字:FPgrowth.频繁项集.条件FP树.非监督学习作者:米 ...

  2. 机器学习实战(Machine Learning in Action)学习笔记————07.使用Apriori算法进行关联分析

    机器学习实战(Machine Learning in Action)学习笔记————07.使用Apriori算法进行关联分析 关键字:Apriori.关联规则挖掘.频繁项集作者:米仓山下时间:2018 ...

  3. 机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN)

    机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN) 关键字:邻近算法(kNN: k Nearest Neighbors).python.源 ...

  4. [ML学习笔记] 朴素贝叶斯算法(Naive Bayesian)

    [ML学习笔记] 朴素贝叶斯算法(Naive Bayesian) 贝叶斯公式 \[P(A\mid B) = \frac{P(B\mid A)P(A)}{P(B)}\] 我们把P(A)称为"先 ...

  5. Effective STL 学习笔记 31:排序算法

    Effective STL 学习笔记 31:排序算法 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...

  6. HMM模型学习笔记(前向算法实例)

    HMM算法想必大家已经听说了好多次了,完全看公式一头雾水.但是HMM的基本理论其实很简单.因为HMM是马尔科夫链中的一种,只是它的状态不能直接被观察到,但是可以通过观察向量间接的反映出来,即每一个观察 ...

  7. KVM性能优化学习笔记

    本学习笔记系列都是采用CentOS6.x操作系统,KVM虚拟机的管理也是采用virsh方式,网上的很多的文章都基于ubuntu高版本内核下,KVM的一些新的特性支持更好,本文只是记录了CentOS6. ...

  8. 深挖计算机基础:Linux性能优化学习笔记

    参考极客时间专栏<Linux性能优化实战>学习笔记 一.CPU性能:13讲 Linux性能优化实战学习笔记:第二讲 Linux性能优化实战学习笔记:第三讲 Linux性能优化实战学习笔记: ...

  9. Pandas 性能优化 学习笔记

    摘要 本文介绍了使用 Pandas 进行数据挖掘时常用的加速技巧. 实验环境 import numpy as np import pandas as pd print(np.__version__) ...

随机推荐

  1. iOS- Exception Type: 00000020:什么是看门狗机制(转)

    1.前言    前几天我们项目闪退之后遇到的一个Crash,之后逛了许多论坛,博客都没有找到满意的回复  在自己做了深入的研究之后,对iOS的看门狗机制有了一个基本的了解  而有很多奇怪的Crash可 ...

  2. 偏执的iOS逆向研究员:收集全版本的macOS iOS+越狱+内核调试

    Intro 虽然“只有偏执狂才能够生存”这句话已经被假药停给毁了,但是作为一只有逼格的高大上的iOS逆向分析研究员,难道如果有现成的macOS/iOS全版本镜像可以下载并且无限“漫游”,难道你就不想来 ...

  3. Zen of Python(Python的19条哲学)

    The Zen of Python Beautiful is better than ugly. Explicit is better than implicit. Simple is better ...

  4. stateMachine 相关知识

    一个state的基本构造,processMessage 以及可选的enter exit 和getName. processMessager是用于处理数据. enter 和exit 则是类似于 面向编程 ...

  5. Spring HTTP Service

    基于Spring MVC, 使用Http Service Invoke远程调用方法 (参考: http://blog.csdn.net/hanqunfeng/article/details/43031 ...

  6. C++ Primer 学习笔记_6_标准库类型 -- 命名空间using与string类型

     标准库类型(一) --命名空间using与string类型 引: 标准库类型是语言组成部分中更主要的哪些数据类型(如:数组.指针)的抽象! C++标准库定义的是高级的抽象数据类型: 1.高级:由 ...

  7. shell(1):网络配置、BATH环境和通配符

    一.临时配置网络(ip,网关,dns) ifconfig查看网络配置 修改ip地址  ifconfig ens33 192.168.255.129/24 ens33网卡名称.192.168.255.1 ...

  8. node.js如何读取MySQL数据

    先安装mysql模块. node.js默认安装时,模块文件放在 /usr/local/lib/node_modules 这个目录下,为了便宜管理,模块还是统一安装到这里好. $ cd /usr/loc ...

  9. redirect_uri 參数错误的解决的方法

    我通过java代码去获得用户的openid,一直报redirect_uri. 我页面代码的链接为: https://open.weixin.qq.com/connect/oauth2/authoriz ...

  10. some cmds,tools and utils man

    NAME stdbuf - Run COMMAND, with modified buffering operations for its standard streams. SYNOPSIS std ...