萌新求助,有关SAM

P3975 [TJOI2015] 弦论

@[一扶苏一](/user/65363) emm看到这个贴有点想法就来回复了 本人基本用 map。几点: - map版构造SAM的时间复杂度为 $O(n\log|\Sigma|)$。然而在拆点时,数组版的需要一次复制 $|\Sigma|$ 个信息,而 map 版的不会复制这么多无用信息。也许偶尔有时候 map 会比数组快。 - 在扫描 所有的 的转移时,数组仍然是一次 $O(|\Sigma|)$,但 map 版,同样的,避免了无用信息,数组的还要判断有没有这个转移(map 遍历一次应该不带log吧)。而且 map 方便,直接可以迭代器(C++11 auto更方便)。 - 在 $|\Sigma|$ 很大时,map 显然是最佳选择(生成魔咒) - map 空间 $O(n)$,数组空间 $O(n \log |\Sigma|)$ 以上使本人经常使用 map 的原因。但两种写法掌握还是有必要的吧。(比如这一题我也被卡map,最后吸氧过的) 您可能已经不理这个贴了,那就当作我发表一下自己的看法,供后人借鉴吧。 萌新发言,个人见解,大佬轻喷
by Lice @ 2020-05-22 22:28:55


@[_Wallace_](/user/61430) map 版的构造复杂度应该不是 $O(n \log |\Sigma|)$ 吧…… 感觉差距在在 SAM 上转移的时候,数组的单次转移是 $O(1)$ 的,map 的单次是 $O(\log |\Sigma|)$ 的?
by 一扶苏一 @ 2020-05-22 22:39:39


上一页 |