【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)相对的一种机器学习方法.在机器学习领域,标准的算法理论是一次学习一个任务,也就 ...
随机推荐
- Linux系统中Oracle11g数据库的安装与验证
1.查看Linux系统的位数 2.下载Oracle10g数据库软件 https://blog.csdn.net/xiezuoyong/article/details/81197688 (需要注册Ora ...
- 第一篇:一天学会MongoDB数据库之Python操作
本文仅仅学习使用,转自:https://www.cnblogs.com/suoning/p/6759367.html#3682005 里面新增了如果用用Python代码进行增删改查 什么是MongoD ...
- 二叉树的宽度<java版>
二叉树的宽度 思路:层序遍历的时候,记录每层的节点数量,最后取记录中的最多的数量. 代码实现: public int solution(TreeNode node){ LinkedList<Tr ...
- 《零基础学JavaScript(全彩版)》学习笔记
<零基础学JavaScript(全彩版)>学习笔记 二〇一九年二月九日星期六0时9分 前期: 刚刚学完<零基础学HTML5+CSS3(全彩版)>,准备开始学习JavaScrip ...
- 【BUG】12小时制和24小时制获取当天零点问题
[BUG]12小时制和24小时制获取当天零点问题 最近在写定时服务的时候,要获取当天的零点这个时间,但是是这样获取的 DateTime dt = DateTime.Parse(DateTime.Now ...
- linux主机上,UnixBench性能测试工具使用
1,下载 wget http://soft.laozuo.org/scripts/UnixBench5.1.3.tgz [root@VM_0_15_centos test]# [root@VM_0_ ...
- Python Tkinter-Event
1.点击 from tkinter import * root=Tk() def printCoords(event): print(event.x,event.y) bt1=Button(root, ...
- Split the Number(思维)
You are given an integer x. Your task is to split the number x into exactly n strictly positive inte ...
- struts通配符*的使用
<action name="user_*" class="com.wangcf.UserAction" method="{1}"> ...
- IHttpModule的那些事
写在前面 关于IHttpModule的相关内容,在面试的时候也被问到过,当时也是隐隐约约的感觉这个接口有一个Init方法,可以在实现类中的Init方法注册一系列的事件,说句实话,具体哪些事件,忘了差不 ...