zoukankan      html  css  js  c++  java
  • 无向图的 三元环

    无向图的 三元环 - 四元环 计数

    问题描述:

    给定一个(n)个点(m)条边的无向图,统计其中三元环/四元环的个数

    三元环

    考虑枚举一条边((u,v)),为了避免重复我们可能令(u<v)

    然后暴力枚举求出(u,v)两个点出边的交点个数

    具体的,先对于(u)的出点打标记,然后查询(v)的出点中被标记的个数

    tips:当然每个三元环会被算三次

    这样复杂度显然是(O(nm))的,当(v)点度数大时就可以卡掉

    优化

    强制(deg_u>deg_vor deg_u=deg_v,u<v)

    考虑先固定(u),预处理出标记情况,然后枚举每个合法的((u,v))

    再去枚举(v)的出边

    考虑证明这个复杂度上限为(O(msqrt m))级别

    假设对于((u,v))

    1.如果(deg_vleq sqrt m),显然它们被枚举的次数总和(leq m),枚举复杂度为(O(msqrt m))

    2.对于(deg_v>sqrt m),则显然有(deg_uge deg_v>sqrt m)

    会枚举到(v)(u)显然不超过(sqrt m)个,因此这样的(v)遍历次数为(O(msqrt m))

    故复杂度为(O(msqrt m))

    [ ]

    四元环

    类似三元环的方法,同样按照((deg_u,u))二元组递减的顺序设定排名

    强制(u)为四元环中排名最小的点,枚举合法的边((u,v)),那么我们计算的实际上是每个(v)的出边的交的个数

    依次枚举每个(v)的过程中,对于出边((v,w))维护(w)出现次数,即可求出交点个数

    容易发现这样的计算不会出现重复

    而复杂显然是与上面相同的,还去掉对于(u)的出点打标记的过程

  • 相关阅读:
    静态资源分析 ------ CocosCreator
    性能分析 ------ CPU运行卡点
    神犇的blog
    0x01-1 原码 反码 补码 概念 原理 详解
    埃拉托色尼素数筛法(转)
    Miller-Rabin概率素数测试算法(转)
    欧拉函数(转)
    中国剩余定理(孙子定理)详解 (转)
    负数取模(转)
    HDU1430 BFS + 打表 + 康托展开(转)
  • 原文地址:https://www.cnblogs.com/chasedeath/p/14567831.html
Copyright © 2011-2022 走看看