转载:http://blog.csdn.net/wukonwukon/article/details/7900977

今天看到topcode上的一个题目,题解直接说是拟阵,然后就是一大通的证明。好奇的我今天就看了看拟阵的知识。

拟阵可以用来研究贪心算法,他是贪心算法的数学基础,可以这么说,一个问题如果他可以转换为拟阵,那么一定可以用贪心算法进行求解;但是并不是所有的可用贪心算法求解的问题都能转换为拟阵。——主要是用来求解最优问题。

相关资料:2007年国家集训队论文  浙江省杭州第二中学 刘雨辰的《对拟阵的初步研究》,论文讲的非常详细易懂。中学生能看懂的东西,我相信我一个大学生也应该能看懂,更何况,他都写成了论文,我就更可以看懂了。

拟阵中文又称矩阵胚,英文名matroid。1935年美国数学家Whitney首先提出了拟阵的概念。拟阵是他在研究线性无关时发现的。拟阵是组合优化与图论的重要内容,在近几十年得到了空前的发展,成为了一门博大精深的学科 :。

定义:

一个拟阵是满足下列条件的一个序对 M=(S,L):  

(1)S是一个有穷集合(S is a finite set);  

(2)L是S的一个非空子集簇,即L是由S的子集作为元素构成的集合,且非空;  

(3)如果B∈L,并且A包含于B,则有A属于L,称为遗传性;  

(4)如果A∈L,B∈L并且|B|>|A|,则有一定存在一个x∈B-A,使得集合A并上{x}之后形成的集合仍属于L,该性质称为交换性。

我们来同步地看我们的两个实例:

对于部分背包问题,我们首先进行一步转化:将体积为V,单位价值为W的物品变成V个体积为1,价值为W的物品。这样物品就全是单位体积的了。我们可以定义这样一个M=(S,L) :

1、 S是所有物品的集合

2、 

这个M显然满足子集系统的前两条件。根据L的定义,对任意x∈L,任意y∈x,满足|y|≤|x|≤MAX,有y∈L,因此M满足遗传性,是一个子集系统。对任意A∈L,B∈L,随意选取一个x∈B-A,令C=A∪x,显然有|C|=|A|+1≤|B|,所以M满足交换性。因此M也是一个拟阵。我们称M为背包问题的拟阵。

最小生成树问题是在无向图上进行的。因此考虑对于无向图,我们可以定义这样一个:

1、 S是边集E

2、 

公式输入太麻烦了,证明看开头给的那篇论文。

适宜用贪心方法获得最优解的许多问题,都可以归结为在加权矩阵中找出一个具有最大权值的独立子集问题。因为任意元素的权值都是正的,故找出的最优子集同时也是最大子集。下面是求带权拟阵最优子集的贪心算法。

[cpp] view plaincopyprint?
  1. GREEDY( M , W )
  2. A<-空集
  3. 将S中的元素按照权值W大优先组织成一个优先队列。
  4. While ( S不为空 )
  5. x = GetMax( S ) ;
  6. if ( A ∪ {x} ∈ I)
  7. A = A ∪ {x} ;
  8. return A

这个算法排序的时间为O(NlogN),共判断N次,设判断复杂度为f(N),则整个算法运行时间为O(NlogN+Nf(N))

GREEDY的后续操作就会找出M'中的一个具有最大权值的独立子集。而GREEDY的全部操作就可找出M的一个具有最大权值的独立子集。

很经典的东西,虽然acm不大考这个东西,但是还是好奇的了解一下吧,对贪心有了更深的理解,说不定哪天就用到了

拟阵论 贪心策略的数学基础相关推荐

  1. Codeforces Round #700 (Div. 2) D2 Painting the Array II(最通俗易懂的贪心策略讲解)看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 整场比赛的A ~ E 6题全,全部题目超高质量题解链接: Codeforces Round #700 ...

  2. 算法练习day13——190401(前缀树、贪心策略拼接字符串使字典序最小)

    1.前缀树(Trie Tree) 1.1 字符串生成前缀树的过程 字母是填在路上的,不是填在节点上的. 首先是一个空的头结点: 加入"abc"到这棵树中: 头结点有到a的路吗?没有 ...

  3. 对下图所示的连通网络G,用克鲁斯卡尔(Kruskal)算法求G的最小生成树T,请写出在算法执行过程中,依次加入T的边集TE中的边。说明该算法的基本思想及贪心策略,并简要分析算法的时间复杂度

    对下图所示的连通网络G,用克鲁斯卡尔(Kruskal)算法求G的最小生成树T,请写出在算法执行过程中,依次加入T的边集TE中的 边.说明该算法的基本思想及贪心策略,并简要分析算法的时间复杂度

  4. 贪心策略取得最优解的条件_什么是贪心算法?

    一.什么是贪心算法 贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择.(局部最优解,而不是整体最优解) 贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择.必须注意的是,贪心算法不 ...

  5. 贪心策略--16经典问题总结!

    贪心算法 编号 题目 1货郎担 问题: 货郎担问题:假定有五个城市,已知费用矩阵如下,分别从五个城市出发,然后选取一条费用最小的线路,验证这种算法不能得到最优解. 贪心选择:每次选择之前没有走过的费用 ...

  6. 区间覆盖全部类型及部分精选习题汇总详解(贪心策略)

    内容如下: 1)区间完全覆盖问题 问题描述:给定一个长度为m的区间,再给出n条线段的起点和终点(注意这里是闭区间),求最少使用多少条线段可以将整个区间完全覆盖 样例: 区间长度8,可选的覆盖线段[2, ...

  7. 贪心策略构筑“奶牛铁塔”(洛谷P2676题题解,Java语言描述)

    题目要求 P2676题目链接 分析 哈哈哈,好一个"超级书架"+"奶牛铁塔",哈哈哈-- 这题就是用贪心策略,需要排一个序,然后每次选最高大强壮的奶牛加入&qu ...

  8. 贪心策略摘果子(洛谷P1478题题解,Java语言描述)

    题目要求 P1478题目链接 分析 本题的低配版题目链接 → 题解 那个题就是纯水题没啥可写的,我除了贴代码无话可说,但这题吧,虽然不算难,但也可一说. 建议大家移步这里 → 精辟题解 这位爷写了本题 ...

  9. 用贪心策略均分纸牌(洛谷P1031题题解,Java语言描述)

    题目要求 P1031题目链接 分析 我们一定要知道的是average,这个average其实就是每堆牌最终一定要达到的情况. 想要更简单的结果,那就可以用贪心策略,从某一侧开始,逐一的补齐或天选,反正 ...

  10. 硬币支付问题(贪心策略)

    一.什么是贪心策略呢? 贪心算法是一种递推算法,用局部最优解来推导全局最优解,是对遍历解空间的一种优化 当问题具有最优子结构时,可用动态规划,而贪心是动态规划的一种特例 特点: 只看眼前 遵循某种规则 ...

最新文章

  1. 别再用 BeanUtils 了,这款 PO VO DTO 转换神器不香么?
  2. 内核调试和系统调用劫持
  3. 模拟四:STEMA 考试选择题模拟练习试卷(中级组)及答案 + 自我解题笔记
  4. 基于工程经验的『RESTful接口设计规范』
  5. IP 地址编址方式(分类、子网划分、无分类)
  6. git 忽略 部分文件夹_git提交忽略某些文件或文件夹
  7. BufferedInputStream的read()方法源码解析
  8. php while 自增,PHP 布尔值的自增与自减的实现方法
  9. 使用DirectX9进行遮盖剔除
  10. 统计字符串中某字符出现次数
  11. 345. Reverse Vowels of a String【easy】
  12. linux第一课历史与未来方向
  13. 矩阵乘法计算量估算/华为机试(C/C++)
  14. iOS 13 SceneDelegate适配
  15. Android 实现百度地图骑行路线规划,骑行路线规划
  16. 教你在五分钟构建一个App页面
  17. 使用DW设置网页背景图
  18. 树莓派3下开启SSH服务
  19. 计算机毕设 SSM线上少儿编程系统 在线少儿编程学习系统 少儿编程教育课程平台Java
  20. c# 如何实现图片压缩

热门文章

  1. 科技行业组织称英国在脱欧后可能成为“数据避风港”
  2. Mac OSX上pg gem的安装问题
  3. linux(ubuntu) 查看系统设备信息
  4. Java核心编程实践--视频
  5. Photoshop钢笔工具使用方法
  6. 复变函数:傅里叶变换
  7. 第九周-每周例行报告
  8. 1108 Finding Average (20)(字符串)
  9. Android开发学习笔记:圆角的Button
  10. 大K提醒各位常备DOS杀毒盘