提供一种另类做法的复杂度证明
查看原帖
提供一种另类做法的复杂度证明
684254
Rain_chr楼主2024/9/25 19:58

虽然可能想到的人不多,但为了有和我一样脑回路新奇的后人少走弯路,还是记录一下。

如果这算是讨论区题解,那我自行删除。

我们设 fi,j,0/1,0/1f_{i,j,0/1,0/1} 表示以 (i,j)(i,j) 路径为根时端点 i,ji,j 有没有被选择情况下两点子树内的答案,同时枚举回文子序列的中心是谁,那么转移时需要枚举以另外一个端点为根时当前点的儿子。

这样看着复杂度高达 O(n4)O(n^4),但是可以尝试进行一下分析复杂度。

首先最外层枚举根肯定时无关紧要的,因为我们记忆化之后状态数为 O(n2)O(n^2) 量级。但是枚举根作为奇回文串中心是需要枚举两个儿子记搜,这样显然是 O(deg2)O(n2)O(\sum deg^2) \le O(n^2),于是只用考虑转移时枚举儿子的复杂度。

当枚举转移点对 (x,y)(to,y)(x,y) \rightarrow (to,y) 时,其本质是在枚举树边,也就是对于一条边仅会有 O(n)O(n) 中转态需要通过他转移,所以这一部分总复杂度仍然是平方级别的。

因此,这种看起来不靠谱的做法实际复杂度是 O(n2)O(n^2) 的,其是本质与题解区别不大,但是复杂度并不太显然。

2024/9/25 19:58
加载中...