无向图 k 元环相关问题

以下我们并没有考虑计数时重复计算的问题,讨论一些细节可以做到这一点。并且假设 \(n,m\) 同阶。

首先我们考虑 \(k\) 比较小的情况。

考虑最简单的 \(k=3\)

一个非常直观的做法应该是枚举一个点 \(u\) 和它的出边 \((u,v)\),然后再枚举 \(v\) 的一条出边。这个大概是 \(O(m(n+m))\) 的,做了跟没做一样,十分的不好啊!

我们考虑一下,所有三元环的上界是 \(\binom{n}{3}\) 的,但显然当 \(m\) 不是很大的时候,你构不出来这个上界。我们考虑怎么减少我们重复的枚举。

一个经典做法是考虑给所有点重新编号,我们按照 \((deg,id)\) 的顺序给它们重编号之后给所有边定向,不妨定为由小的点连向大的点。

这个时候,我们可以发现一个三元环一定是 \((u,v),(v,w),(u,w)\) 这样的形式。很自然地,我们考虑枚举点 \(u\) 和出边 \((u,v)\),然后考虑 \(v\) 的出边 \((v,w)\),每次 check \((u,w)\) 是否存在。

后面这个 check 存在可以在枚举 \((u,v)\) 时对 \(v\) 打 tag 来简单进行。我们下面来证明这个复杂度是 \(O(m\sqrt{m})\) 的。

我们记 \(odeg_i\) 表示 \(i\) 的出度,总的时间复杂度是 \(O(\sum_{i=1}^modeg_{v_i})\)。考虑进行一个分讨。

  • \(deg_{v_i}\le \sqrt{m}\),显然 \(\sum_i odeg_{v_i} \le \sum_i deg_{v_i} \le \sum_i \sqrt{m} \le m\sqrt{m}\)
  • \(deg_{v_i} > \sqrt{m}\),我们每个点可能只向度数不小于自己的点连边,也就是 \(odeg_{v_i} \le \sqrt{m}\),那就有 \(\sum_i odeg_{v_i} \le \sum_i \sqrt{m} \le m\sqrt{m}\)

综合上面两个部分,我们可以得到总的时间复杂度是 \(O(m\sqrt{m})\)

从另一个角度来讲,当我们连出一张完全图的时候,此时 \(n=O(\sqrt{m})\),总的三元环个数是 \(\binom{n}{3}=O(n^3)=O(m\sqrt{m})\),也就是说,我们的上界是一个“紧”的。

类似的,当 \(k=4\) 时,四元环可以分成两类,一类是简单的,另一类是 \((u,v),(u,w)(w,x),(v,x)\)。考虑这个怎么做。我们可以把两个部分拼起来。

枚举点 \(u\),枚举原图的边 \((u,v)\),新图的边 \((v,x)\),对 \(x\) 做一些标记。再次枚举原图的边 \((u,w)\),新图的边 \((w,x)\),进行一些统计。我们就把两部分拼了起来。

这个代码上的实现可能不需要分两类来讨论,我没有细想。

然后考虑一下 \(k=5\) 的情况。

我们可以枚举任意两条边 \((u,v),(w,x)\),并且令它们没有重复点,且 \((u,w)\) 存在,此时我们只需要知道有几个点和 \(v,x\) 都有边。可以考虑预处理出来,这个预处理可能能做到 \(O(m\sqrt{m})\)?总复杂度可能是 \(O(m^2)\)

类似的,\(k=3,4\) 时可以做到差不多的复杂度。

然后发现其实 \(k\) 很大的情况会非常困难,因为这个问题在 \(k=n\) 时是一个类似于哈密顿路径计数的问题,那么这个问题也是很难的,没有太大意义。

至此,我们基本解决了 \(k\) 元环相关问题。

然而代码我并没有写,可以 search 一下。

posted @ 2023-02-26 21:15  PYD1  阅读(125)  评论(0编辑  收藏  举报