OSDN Git Service

Update tree-ahu.md
authorIr1dXD <sirius.caffrey@gmail.com>
Fri, 10 Apr 2020 00:39:54 +0000 (08:39 +0800)
committerGitHub <noreply@github.com>
Fri, 10 Apr 2020 00:39:54 +0000 (08:39 +0800)
docs/graph/tree-ahu.md

index cd31d02..6d7d50e 100644 (file)
@@ -125,8 +125,8 @@ $$
 ### 复杂度证明
 
 首先注意到第 $i$ 层由拼接得到的 $NAME$ 的总长度为第 $i$ 层点的度数之和,即第 $i+1$ 层的总点数,以下用 $L_i$ 表示。算法的下一步会将这些 $NAME$ 看成字符串(数组)并排序,然后将它们替换为其在层内的排名(即重新映射为一个数)。以下引理表明了对总长为 $L$ 的 $m$ 个字符串排序的复杂度:
-1.我们可以使用基数排序在 $O(L+|\Sigma|)$ 的时间内完成排序,其中 $|\Sigma|$ 为字符集的大小。(有一些实现细节,参见参考资料)
-2.我们可以使用快速排序在 $O(L \log m)$ 的时间内完成排序。证明的大致思路为快排递归树的高度为 $O(\log m)$ ,且暴力比较长度为 $\ell_1$ 和 $\ell_2$ 的两个字符串的复杂度为 $O(\min\{\ell_1,\ell_2\})$ 。
+1. 我们可以使用基数排序在 $O(L+|\Sigma|)$ 的时间内完成排序,其中 $|\Sigma|$ 为字符集的大小。(有一些实现细节,参见参考资料)
+2. 我们可以使用快速排序在 $O(L \log m)$ 的时间内完成排序。证明的大致思路为快排递归树的高度为 $O(\log m)$ ,且暴力比较长度为 $\ell_1$ 和 $\ell_2$ 的两个字符串的复杂度为 $O(\min\{\ell_1,\ell_2\})$ 。
 
 在 AHU 算法中,第 $i$ 层字符串的字符集大小最多为第 $i+1$ 层的点数,即 $L_i$ ,所以基数排序的复杂度是线性的。根据 $\sum_i L_i=O(n)$ ,并将每层的复杂度相加后可以看出,若使用字符串的基数排序,则算法的总复杂度为 $T(n)=O(n)$ 。同理,如果使用快排排序字符串,那么 $T(n)=O(n \log n)$ 。