基于内容的组播高效过滤算法解析
1. 算法运行时间分析
在整个算法中,涉及到探测(probe)、截断(truncate)和合并(add merge)操作。
- 探测操作 :总共进行 $N$ 次探测,每次探测的时间复杂度 $\leq \log N$,因为每次探测实际上就是在二叉搜索树中进行一次搜索。
- 截断操作 :截断操作包含 $N$ 次搜索和 $\leq N$ 次删除(因为每个断点只被删除一次,并且组播树中的每个节点最多引入一个断点),每次操作的时间复杂度 $\leq \log N$。所以,截断和探测操作在整个算法中的时间复杂度为 $O(N \log N)$。
- 合并操作 :还需要证明所有合并操作的总时间复杂度为 $O(N \log N)$。下面的引理可以证明这一点:
- 引理 3 :计算 $D_v$ 时合并操作的总成本最多为 $n(v) \log n(v)$。
- 证明 :通过对 $v$ 的高度进行归纳。对于所有叶节点,该命题显然成立,因为不需要进行合并操作。在任何内部节点 $v$ 处,为了得到 $D_v$,需要依次合并 $D_{v_1}, D_{v_2}, \ldots, D_{v_{c(v)}}$。设 $s_i = \sum_{j = 1}^{i} n(v_i)$。通过归纳假设(对 $v$ 的子节点数量进行新的归纳),假设得到前 $i$ 个 $D_{v_j}$ 的合并函数的时间为 $s_i \log s_i$。当 $i = 1$ 时,基础情况通过归纳(之前的归纳)成立。假设