zoukankan      html  css  js  c++  java
  • 点双 & 边双连通图计数的细节比较

    前言

    写了两个烂大街的东西,以及我研究时的一些阻碍和心路历程。

    点双连通图计数

    (b_i) 表示 (i) 个点的有标号 无根 点双连通图个数。(d_i)(i) 个点的 有根 连通图个数,其 EGF 为 (D(x) = sum_i frac{d_i}{i!}x^i)。显然 (D(x)) 可以用 城市规划 的方法求出((ln))。

    重点思考如何在点双和连通图之间建立关系。尝试剖析有根连通图的结构:一个根,周围可能存在着一些点双连通分量,然后这些点双连通分量中的点又连着一些连通图。然而这只是很笼统的概述,我们把它细化。

    首先我们称一个 有根 点双以及下面连着的一些连通图为“一个部分”。那么把若干个部分的根 叠合 在一起就是一个有根连通图。对于每个部分,考虑除根之外的所有在包含根的点双上的点,从这一个点双到“一个部分”,可以视作是将这些点 替换成一个有根连通图

    然后思考点双部分怎么做。首先我们需要将根隔离开来。根据这个,写出一个部分的式子:

    [sum_{ige 1} frac{b_{i+1}}{i!}cdot D^i(x) ]

    解释:枚举点双的大小,包含根在内为 (i+1),虽然实际上只有 (i) 个点可以换成有根连通图,但点双部分的连接方案是 (b_{i+1})(D^i(x)) 表示将 (i) 个点每个都替换成一个有根连通图,但直接乘幂众所周知是 有序 拼接,为了而显然这不应该有序,于是 (/i!) 消除其顺序。

    然后设一个机智的 EGF:(B(x)=sum_{i}frac{b_{i+1}}{i!} x^i),我们发现上式就是把 (x) 替换成了 (D(x)),即 (B(D(x)))

    最后还要将这些部分组合,然后用一个根拼接,于是:

    [D(x) = xexp B(D(x)) ]

    然后套用扩展拉格朗日反演就可以 (O(nlog n)) 求出 (B(x)) 某一项的值了。

    边双连通图计数

    和点双用类似的思路,尝试剖析连通图的结构,建立其与特殊的边双连通图的关系。设 (b_i)(i) 个点的 有根 边双连通图个数,(d, D(x)) 的定义同上。

    那么对于一个有根连通图,感觉边双的性质,根下面会挂上 一个 边双,边双上每一个点(包含根)都会 若干 条边,边的另一端是一个有根连通图。

    根所在的边双中,每个点及其下面挂的一些连通图,我们写出它的式子:

    [xexp D(x) ]

    非常显然。那么这个图就是这些部分的组合:

    [sum_{ige 1} b_i frac{(xexp D(x))^i}{i!} ]

    (B(x)=sum_{i}frac{b_i}{i!}x^i),即得:

    [D(x)=B(xexp D(x)) ]

    同样可以拉反 (O(nlog n)) 求出一项。

    细节剖析与对比

    由于点双和边双的性质存在差异,两者推出的式子不同,推导细节上也存在出入。

    下面是我学习是遇到的困惑以及可能正确的解答。

    无根 与 有根

    为什么点双的 (b) 是无根的而边双是有根的?

    首先明确一点,就是这个边双的有根才是自然的。而点双的推导中我们由于根非常特殊,将其从“部分”中去除,实际上就将根区分开来了,自然地形成了一个有根连通图,(b_{i+1}) 仅仅是一种点双的连接方案。换言之,这幅同样的连通图可能以很多中方法被考虑多次,但孤立开来的总是不同的点,相当于有根。

    边双没有任何将根特殊考虑的体现,为了与有根的 (D(x)) 对应,定义就是有根的定义。

    下挂 与 替换

    这个可能是我结构没理清的结果(

    下挂和替换其实是非常自然的,因为点双之间是通过点连接,边双之间是通过边连接,所以考虑一个点附带的点双时自己也在里面,所以要把包括自己在内的整体替换,然而边双中一个点附带的边双不包括自己,自然是在自己的基础上额外考虑一些东西就行。

    ——Mr_Spade

    可以发现点双边双两者在处理 分量上的点到有根连通图 的方法是有差异的。

    这和点双边双本身的性质有关,而两者的方法都不会破坏其结构性质,或者漏掉某种情况。

    如果点双是下挂,那一个三角形连通图都算不到,而这显然合法,漏数。

    如果边双是替换,那整个包含根的边双则可能扩大(比如替换了一个三角形,这个三角形也应该是边双的一部分),也就是说真实的边双并不是 (i) 而是更大,在计算更大的边双时就会将这个图算重。

    后记

    https://www.cnblogs.com/-Wallace-/p/nature-of-solutions.html

  • 相关阅读:
    了解DockerFile
    容器数据卷
    Docker镜像讲解
    Java语法学习笔记:多态
    决策树之分类与回归
    python数据分析回归算法
    python之斐波那契序列算法的总结
    pandas 关于数据分组和聚合
    pandas中关于数据合并join,merge
    scrapy爬虫之断点续爬,增量爬取,断网急救
  • 原文地址:https://www.cnblogs.com/-Wallace-/p/vbcc-ebcc-counting.html
Copyright © 2011-2022 走看看