zoukankan      html  css  js  c++  java
  • 三元环

    三元环

    • 问题描述,给定无向图,然后求出三元环个数

    • 建图做法:先把无向图转化为 (DAG) ,把边去重,然后把度数从小的点连向度数大的点。

    • 显然的是,每个三元环只能被找到一次。

    • 时间复杂度证明:

    可知边 ((x, y)) 被遍历的次数是 (out_y),所以总复杂度是 (m imes out_i)
    然后假设所有点 (out_i< sqrt m),那么上界就是 (m imes sqrt m)
    假设有点度数存在 (out_i> sqrt m),因为是度数低的连向度数高的,所以至少有 (sqrt m) 点连向 (i),并且度数也是 (sqrt m),所以,其实度数最大只能是小于 (sqrt m),不能大于 (sqrt m)
    所以总的时间复杂度是 (O(m sqrt m)) 的。

    • 找环
    for (int i = 1; i <= n; i ++) {
        for (auto v:G[i]) vis[v] = i;
        for (auto v:G[i]) {
            for (auto vv : G[v]) {
                if (vis[vv] == i)x++;
            }
        }
    }
    
  • 相关阅读:
    郑码
    AutoCAD 安装
    China Mobile 移动
    CCB 建行
    Word基础
    Java 继承
    Java 封装(内部类)
    Java 类与对象
    Java 方法
    Java 数组
  • 原文地址:https://www.cnblogs.com/Xiao-yan/p/14830626.html
Copyright © 2011-2022 走看看