【learning】加权拟阵与贪心
首先。。
这篇东西的话算是一个关于拟阵部分知识的小总结,有些语言相对来说偏向便于理解方面,所以可能。。有一些说法会不是那么严谨大概是这样
一些概念
线性无关:一组数据中没有一个量可以写成其余量的线性表示,也就是对于\(\{x_1,x_2,...x_n\}\)不存在一组不全为\(0\)的\(\{k_1,k_2,k_3...,k_n\}\)满足\(\sum\limits_{i=1}^{n}k_ix_i=0\)
线性相关:就是存在一组不全为\(0\)的\(\{k_1,k_2,k_3...,k_n\}\)满足\(\sum\limits_{i=1}^n k_ix_i=0\)
拟阵是啥
一个有限拟阵是一个满足下列条件的二元组\(M=(S,I)\):
1、\(S\)是一个有限集
2、\(I\)是由\(S\)的一些子集组成的有限非空集合(非空族),这些子集称为\(S\)的独立子集。属于\(I\)的子集要满足的条件是如果\(B\in I\)且\(A\subseteq B\),那么有\(A\in I\)。这种性质称为遗传性(如果\(I\)满足这种性质我们称\(I\)是遗传的)。注意,\(\emptyset \in I\)
3、若\(A\in I,B\in I\)且\(|B|>|A|\),那么\(\exists x\in B-A\)使得\(A\cup \{x\}\in I\)。这种性质称为交换性质(称\(M\)满足交换性质)
举个栗子,\(M=(S,I)\)是一个拟阵,其中:
\[
S=\{1,2,3\},I=\{size<=2的子集\}=\{\emptyset,\{1\},\{2\},\{3\},\{1,2\},\{1,3\},\{2,3\}\}
\]
拟阵有很多不同的类型(e.g.组合拟阵、分割拟阵、向量拟阵、列拟阵、环拟阵、图拟阵、匹配拟阵etc.)然而在这里都不会展开讲
如果说拟阵中的一个独立子集\(A\)不存在扩展,那么就称它是最大的,然后有这样一个比较重要的性质:拟阵中所有的最大独立子集都具有相同的大小
加权拟阵
如果说一个拟阵\(M=(S,I)\)关联了一个权重函数\(w\),这个函数为\(S\)中的每一个元素\(x\)赋予一个严格大于0的权重\(w(x)\),那么我们称这个拟阵\(M\)是加权的。子集\(A\)的权值就是
\[
w(A)=\sum\limits_{x\in A}w(x)
\]
现在考虑一个这样的问题:在加权拟阵中寻找最大权重独立子集,换句话说就是,给定一个加权拟阵\(M=(S,I)\),寻找独立集\(A\in I\)使得\(w(A)\)最大。
这个问题的求解我们可以用贪心,具体一点的话就是:
1、将\(S\)中的元素按照\(w\)降序排列
2、现在有一个集合\(A\)(初始的时候为\(\emptyset\)),按照上面排好的顺序依次考虑\(S\)中的每个元素,如果说这个元素\(x\)满足\(A\cup \{x\}\)是独立的那么将\(x\)加入\(A\)中
3、\(A\)就是我们要求的答案
然后可以这样求解是因为拟阵具有以下几个十分优秀的性质
拟阵具有贪心选择性
假定\(M=(S,T)\)是一个加权拟阵,加权函数为\(w\),且\(S\)已经按照权重单调递减排序。令\(x\)是\(S\)中第一个满足\(\{x\}\)独立的元素(存在的话qwq),如果存在这样的\(\{x\}\),那么存在\(S\)的一个最优子集\(A\)包含\(x\)
如果一个元素在初始的时候不是最优的选择,那么在随后也不会被选入最优集合中
(这里需要两个引理来说明,第二个是第一个的逆否命题)
1、对于拟阵\(M=(S,I)\),如果\(x\)是\(S\)中的一个元素,而且是\(S\)的某个独立子集\(A\)的一个扩展,那么\(x\)也是\(\emptyset\)的一个扩展
证明:由于\(x\)是\(A\)的一个扩展,说明\(A\cup \{x\}\)是独立的,由于\(I\)是遗传的,所以\(\{x\}\)必然是独立的,所以是\(\emptyset\)的一个扩展
2、对于拟阵\(M=(S,I)\),如果\(x\)是\(S\)中的一个元素,且不是\(\emptyset\)的一个扩展,那么它也不是\(S\)中任何独立子集\(A\)的扩展
证明:(就是1的逆否命题)
所以我们可以得知,如果一个元素首次不能用于构造独立集,之后永远也不可能用到了
因此寻找起始元素时,贪心地直接跳过\(S\)中那些不是\(\emptyset\)的扩展的元素不会导致错误的结果,因为这些元素永远都不会被用到
拟阵具有最优子结构性质
对于加权拟阵\(M=(S,I)\),\(x\)是\(S\)中第一个被贪心选出的元素,则接下来寻找一个包含\(x\)的最大权重独立子集的问题归结于寻找加权拟阵\(M'=(S',I')\)的一个最大权重独立子集的问题,其中:
\[
\begin{aligned}
S'&=\{y\in S:\{x,y\}\in I\}\\
I'&=\{B\subseteq S-\{x\}:B \cup \{x\}\in I\}
\end{aligned}
\]
所以我们就可以说明贪心的正确性了ovo
所以其实有些问题我们可以将其转为求加权拟阵的最大权重独立子集这样的一个问题,然后我们就可以开心贪心啦
这里为了方便理解举一个比较简短的例子:最小生成树的求解,可以看成求解\(M_G=(S_G,I_G)\)的最大权重独立子集,其中\(w\)就是边权,\(S_G\)是边集,\(A\in I_G\)当且仅当\(A\)是无圈的
(好的先写这么多了吧哈哈哈哈。。。剩了一些证明的坑。。晚点再说吧。。。)
【learning】加权拟阵与贪心的更多相关文章
- bzoj 4004 [JLOI2015]装备购买——拟阵证明贪心+线性基
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4004 看Zinn博客水过去…… 运用拟阵可以证明按价格从小到大买的贪心是正确的.但自己还不会 ...
- 从拟阵基础到 Shannon 开关游戏
从拟阵基础到 Shannon 开关游戏 本文中的定理名称翻译都有可能不准确!如果有找到错误的同学一定要联系我! 本文长期征集比较好的例题,如果有比较典型的题可以联系我 目录 从拟阵基础到 Shanno ...
- 强化学习10-Deep Q Learning-fix target
针对 Deep Q Learning 可能无法收敛的问题,这里提出了一种 fix target 的方法,就是冻结现实神经网络,延时更新参数. 这个方法的初衷是这样的: 1. 之前我们每个(批)记忆都 ...
- bzoj2460题解
[题意分析] 给你一个可重复数集,要求从中选取一个关于异或空间线性无关的子集,使子集的权值和最大. [解题思路] 定义:一个有序对(S,I)称为拟阵当且仅当该有序对满足以下性质: 1.有穷性:S是一个 ...
- 组合优化学习笔记<之>从贪心算法到子集系统再到拟阵
贪心算法是用的比较多的一种优化算法,因为它过程简洁优美,而且结果有效.有些优化问题如最大权森林(MWF)是可以用贪心问题求解的,由于最小支撑树(MST)问题与MWF是等价的,所以MST也是可以用贪心算 ...
- machine learning in coding(python):使用贪心搜索【进行特征选择】
print "Performing greedy feature selection..." score_hist = [] N = 10 good_features = set( ...
- 论文笔记(2):A fast learning algorithm for deep belief nets.
论文笔记(2):A fast learning algorithm for deep belief nets. 这几天继续学习一篇论文,Hinton的A Fast Learning Algorithm ...
- 机器学习基石(台湾大学 林轩田),Lecture 2: Learning to Answer Yes/No
上一节我们跟大家介绍了一个具体的机器学习的问题,以及它的内容的设定,我们今天要继续下去做什么呢?我们今天要教大家说到底我们怎么样可以有一个机器学习的演算法来解决我们上一次提到的,判断银行要不要给顾客信 ...
- 【论文笔记】多任务学习(Multi-Task Learning)
1. 前言 多任务学习(Multi-task learning)是和单任务学习(single-task learning)相对的一种机器学习方法.在机器学习领域,标准的算法理论是一次学习一个任务,也就 ...
随机推荐
- sql 命令使用简单记录
半个月前就想记下用过的SQL命令的!!! 主题: 按时间查询: https://blog.csdn.net/hejpyes/article/details/41863349 左关联: se ...
- 用Python实现多站点运维监控
在小型公司里如果产品线单一的话,比如就一个app, 一般1~2个运维就够用了.如果产品过于庞大,就需要多个运维人员. 但对于多产品线的公司来说,运维人员就要必须分多个人负责,因为超过200个站点让1个 ...
- discuz修改附件出售用其他积分,与帖子不一样
现实中我遇到了这种情况,一个资源可以用两种积分购买,于是我决定用售卖贴和出售附件的方式,附件内容与贴内隐藏内容是一样的,但目前discuz的出售主题和附件使用的是同一种积分,有了此修改 1.首先是显示 ...
- JavaScript里的循环方法之forEach,for-in,for-of
JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标 ...
- Atom 插件 Sync Settings 备份与恢复
当使用 Atom IDEA.随着使用的越来越多,安装的插件也越来越多,一旦电脑重装后需要复原开发环境,这将是一件比较头疼的事.「Sync Settings」插件可以帮助我们解决这个问题. 操作流程 安 ...
- 【Python入门学习】闭包&装饰器&开放封闭原则
1. 介绍闭包 闭包:如果在一个内部函数里,对在外部作用域的变量(不是全局作用域)进行引用,那边内部函数被称为闭包(closure) 例如:如果在一个内部函数里:func2()就是内部函数, 对在外部 ...
- 《JavaScript》函数
function foo(a,b){return a+b}//函数申明 var foo=function(){}//函数表达式赋值 var foo=new Function('a','b','retu ...
- Python:列表操作总结
一.创建一个列表 只要把逗号分隔的不同数据项使用方括号括起来即可 list1=['physics','chemistry',1997,2000] list2=[1,2,3,4,5,6,7] [注]:1 ...
- 软件定义网络(SDN)研究进展
写在前面 这是我入门SDN以来的第一篇论文,它是一篇中文综述,看起来相对容易.也让我对SDN有了进一步的认识.下面是我的一些心得. 全文框架 SDN 将数据平面与控制平面解耦合,简化了网络管理. SD ...
- C++寒假计划
课程 西北工业大学的c++程序设计 理由 这个课程里的内容都比较详细,能比较全面的讲解C++,我们是从C过渡到C++的,所以我之前看了阚道洪的面向对象程序设计的课程,他讲解了两者的差别,还有C++对C ...