首先。。

  这篇东西的话算是一个关于拟阵部分知识的小总结,有些语言相对来说偏向便于理解方面,所以可能。。有一些说法会不是那么严谨大概是这样

  ​

一些概念

  线性无关:一组数据中没有一个量可以写成其余量的线性表示,也就是对于\(\{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】加权拟阵与贪心的更多相关文章

  1. bzoj 4004 [JLOI2015]装备购买——拟阵证明贪心+线性基

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4004 看Zinn博客水过去…… 运用拟阵可以证明按价格从小到大买的贪心是正确的.但自己还不会 ...

  2. 从拟阵基础到 Shannon 开关游戏

    从拟阵基础到 Shannon 开关游戏 本文中的定理名称翻译都有可能不准确!如果有找到错误的同学一定要联系我! 本文长期征集比较好的例题,如果有比较典型的题可以联系我 目录 从拟阵基础到 Shanno ...

  3. 强化学习10-Deep Q Learning-fix target

    针对 Deep Q Learning 可能无法收敛的问题,这里提出了一种  fix target 的方法,就是冻结现实神经网络,延时更新参数. 这个方法的初衷是这样的: 1. 之前我们每个(批)记忆都 ...

  4. bzoj2460题解

    [题意分析] 给你一个可重复数集,要求从中选取一个关于异或空间线性无关的子集,使子集的权值和最大. [解题思路] 定义:一个有序对(S,I)称为拟阵当且仅当该有序对满足以下性质: 1.有穷性:S是一个 ...

  5. 组合优化学习笔记<之>从贪心算法到子集系统再到拟阵

    贪心算法是用的比较多的一种优化算法,因为它过程简洁优美,而且结果有效.有些优化问题如最大权森林(MWF)是可以用贪心问题求解的,由于最小支撑树(MST)问题与MWF是等价的,所以MST也是可以用贪心算 ...

  6. machine learning in coding(python):使用贪心搜索【进行特征选择】

    print "Performing greedy feature selection..." score_hist = [] N = 10 good_features = set( ...

  7. 论文笔记(2):A fast learning algorithm for deep belief nets.

    论文笔记(2):A fast learning algorithm for deep belief nets. 这几天继续学习一篇论文,Hinton的A Fast Learning Algorithm ...

  8. 机器学习基石(台湾大学 林轩田),Lecture 2: Learning to Answer Yes/No

    上一节我们跟大家介绍了一个具体的机器学习的问题,以及它的内容的设定,我们今天要继续下去做什么呢?我们今天要教大家说到底我们怎么样可以有一个机器学习的演算法来解决我们上一次提到的,判断银行要不要给顾客信 ...

  9. 【论文笔记】多任务学习(Multi-Task Learning)

    1. 前言 多任务学习(Multi-task learning)是和单任务学习(single-task learning)相对的一种机器学习方法.在机器学习领域,标准的算法理论是一次学习一个任务,也就 ...

随机推荐

  1. Qt 利用XML文档,写一个程序集合 三

    接上一篇https://www.cnblogs.com/DreamDog/p/9214052.html 滚动区域实现, 滚动区域可以三成分层 第一层,显示内容 中间层,滚动层 第三层,爸爸层 把我们要 ...

  2. MySQL数据库--连接

    MySQL数据库的概念: MySQL数据库,包括客户端和服务端.客户端就是操作数据库的终端(命令行.navicat),服务端就是安装有MySQL软件的主机(本机或者服务器),MySQL数据库的端口一般 ...

  3. 百度云 win10 125%界面模糊 解决

    右击图标 ->兼容性->更改高DPI设置 -> 替代高DPI缩放行为.打√

  4. Spark Shell Examples

    Spark Shell Example 1 - Process Data from List: scala> val pairs = sc.parallelize( List( ("T ...

  5. java引用Arcface,实现人脸识别(demo)

    ## 开发环境准备: ###开发使用到的软件和工具: * Jdk8.mysql5.7.libarcsoft_face.dll(so).libarcsoft_face_engine.dll(so).li ...

  6. JDBC及DBUtils

    1.JDBC2.DBUtils ###01JDBC概念和数据库驱动程序 * A: JDBC概念和数据库驱动程序 * a: JDBC概述 * JDBC(Java Data Base Connectivi ...

  7. pyextend库-merge可迭代对象合并函数

    pyextend - python extend lib merge (iterable1, *args) 参数:  iterable1: 实现 __iter__的可迭代对象, 如 str, tupl ...

  8. 【算法设计与数据结构】为何程序员喜欢将INF设置为0x3f3f3f3f?(转)

    摘自https://blog.csdn.net/jiange_zh/article/details/50198097 在算法竞赛中,我们常常需要用到一个“无穷大”的值,对于我来说,大多数时间我会根据具 ...

  9. 汉诺塔python实现

    下载汉诺塔ppt def move(n,A,B,C): if n == 1: print(A,'->',C) else: move(n-1,A,C,B) print(A,'->',C) m ...

  10. c# Application.run和form.show区别

    Application.run(form):在当前线程上开始运行标准应用程序消息循环,并使指定窗体可见. form.show() :使指定窗体可见: 参照:https://blog.csdn.net/ ...