图的分割和子图

其实,平时写算法对应的数据结构。这块是最郁闷的。还是那句,经常 G=G1+G2,G2=G-G1的问题,额外附加代码。这也是,我思考图究竟是什么,是在研究一堆顶点,还是在研究一堆关系的理论的出发点。

这里谈两个概念。一个是集合的子集。一个是图的分割。

由于传统图论,基准定义,认为先有顶点,后有边,边是基于顶点而生。而我认为,图论确实在操作一堆顶点,但是研究的对象是顶点之间的关联。因此,图论的操作对象应该是边。边基本不可分割的信息元素。而孤立点,就是一个只有自己指向自己的边。 我们为什么会叫一个顶点是孤立或不连通?难道是这个顶点长的好看不好看,或者画在图上的位置吗?显然不是。而是根据这个顶点是否有边存在来判定。

那么基于集合子集,对于G(E,P(E))就变的简单了,只要针对E这个集合做处理,就可以很好的对应图的子图的概念。

那么对应标准图论的以下名词我分别给出基于G(E,P(E))的符号化定义。

子图(我省事,就不摘抄标准图论的内容)subgraph

 gif.latex?%20sub(G)=G'%5CLeftrightarrow(G'%5Csubset%20G)

真子图 proper subgraph

 gif.latex?%20psub(G)=G'%5CLeftrightarrow(G'%5Csubset%20G,%5Cexists%20x%20%5Cin%20G%20x%20%5Cni%20G')gif.latex?%20psub(G)=G'%5CLeftrightarrow(G'%5Csubset%20G,G'%20%5Cneq%20G)

生成子图 spanning subgraph

 gif.latex?%20ssub(G)=G'%5CLeftrightarrow(G'%5Csubset%20G,G%20%5Cneq%20G',%5Cforall%20x%20%5Cin%20G%20%5Cwedge%20x%20%5Cni%20G'%20,null(x)%20=%20%5Cphi)

 说明一下,生成子图是图的一个子图。且任意在原图和不在生成子图中元素,全是真是边。即不是顶点。

至于诱导图,边诱导,点诱导,我就不想符号化了。挺无聊的。上面已经很无聊了。

主要关注下生成子图和我先面的一个连通子图 的定义,这个可能标准图论中没有。如下

 gif.latex?csub(G(E,P(E)),A,e)%20=%20G',A%20%5Csubset%20E%5CLeftrightarrow(e%20%5Cin%20G'%20,%5Cforall%20x%20%5Cin%20G%20x%5Cni%20A;%20%5Cforall%20y%20%5Cin%20E%20,p(y)%20%5Ccap%20p(x)%20%5Cneq%20%5Cphi,y%20%5Cin%20G')

文字说明,对于图G,(这里写处G(E,P(E))是强调后面E的指定。)存在一个集合A,和边元素e属于G’,对于任意和G'中元素(A集合内的除外)相邻的边也在G‘中。

也就是说,虽然是个从e的连通。但是在A集合的边,只可能被连入G’,而不会作为G‘的出发点,寻找新的边。由此,如果存在一个e1,其和e的任意path,和A的交集都不为空时,e1不可能在G’内。证明略。方法就是反证。如果在G‘里,必然还有个path和A没关系,由此矛盾。

连通子图,实际上是针对一个图的已知边集合,对图进行切割。当然这些边也存在于子图中。如果你想顶点化切割,则可以令A中的边都是 null(e)不为空的。

当然可能存在G’等于G。如果你的A并没有将e彻底和其他某些顶点割列开来。

其实,这里虽然定义的是连通子图 CSUB(G),但对于大型系统而言,更有价值的是A。特别是

gif.latex?%5Cparallel%20A%20%5Cparallel%20-%20%5Cmid%20A%20%5Cmid

也即,这个A中,顶点的数目。对于大型图的操作,采用分布式,多进程的处理,力求每个独立计算单元的相关性尽可能的少。因此,用最小的顶点去包含更多的G的内容,经常是需要的。这里我直接从边的角度,定义个概念,界(boundary)

可能标准图论中,确实存在对应的定义,但是我就不绕弯子了。直接从这,自说自话的做此定义。

gif.latex?boundary(e1,e2,G)=B,e1%20%5Cin%20G%20e2%20%5Cin%20G%5CLeftrightarrow(%5Cforall%20path(e1,e2)%20%5Ccap%20B%20%5Cneq%20%5Cphi)

文字描述是, 对于e1,e2而言,任何一条path ,都和B交不为空。但这样并没有太多意义。因为可能B和G的差异,就只有e1,e2。

gif.latex?bound(e1,e2,G)=B,B=%20gmin(%5C%7Bbourdary(e1,e2,G)%5C%7D)

意思是说,任何可能的boundary 中最小的情况。这里同样只是抽象的min操作。由此我们对这类问题的求解可以从上面的描述得到如下结论

1、从整个连通图开始,从e1,e2开始。

2、去除那些边,使得余下的也可以保证符合boundary约束。

根据不同的min的操作,会直接导致bound的含义不同。此处不深究。后面会给出特定min下的快速操作算法的分析举例。

此处给出另一个定义密度, density

密度是和bound不可分的。密度表示了一个区域的边集合的数量。由于bound并不代表类似平面图的一个圈,bound本身可能就有厚度。所以密度,独立的存在是没有意义的。一定是个比较关系。谁和谁比,哈,看bound怎么来的。由此定义

gif.latex?dens(G,e1(e1,e2))=%5Cmid%20csub(G,bound(e1,e2),e1)%5Cmid

注意这里(e1,e2)不是个边。而是两个边的二元配对。当然等同的还有dens(G,e2(e1,e2))

可能有经验的朋友就已经注意到了。这里完全可以通过对空间维度的定义,来增加孤立点的边,是的我们可以对空间中离散的点,进行聚类。 由于存在空间测量方法。因此可以通过添加边的方式,来保证每个顶点相互连通。而聚类效果好不好,就看你如果增加额外的边的判断条件,使得dens能够尽可能的相同。

而额外增加的边的条件是什么?哈,数据挖掘的个性化目标啊。。。

 

 

 

 

转载于:https://my.oschina.net/luckystar/blog/56825

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值