81、双倍度量空间中的全动态聚类与多样性最大化

双倍度量空间中的动态聚类

双倍度量空间中的全动态聚类与多样性最大化

1. 基本概念

在度量空间 $(U, dist)$ 中,对于点 $p$ 和半径 $r > 0$,以 $p$ 为中心、半径为 $r$ 的球 $B(p, r)$ 是 $U$ 中所有与 $p$ 的距离至多为 $r$ 的点的子集。$U$ 的双倍维度是满足特定条件的最小值 $D$,即对于所有 $p \in U$,任何球 $B(p, r)$ 都包含在至多 $2^D$ 个以 $U$ 中的点为中心、半径为 $r/2$ 的球的并集中。

有如下重要事实:设 $X$ 是双倍维度为 $D$ 的度量空间中的点集,$Y \subseteq X$ 使得 $Y$ 中任意两个不同点 $a, b$ 的距离 $dist(a, b) > r$。那么对于每个 $R \geq r$ 和任意点 $p \in X$,有 $|B(p, R) \cap Y| \leq 2^{\lceil \log_2(2R/r) \rceil \cdot D} \leq (4R/r)^D$。若 $R/r = 2^i$,则该界限可降低至 $|B(p, R) \cap Y| \leq (2R/r)^D$。

2. 增强覆盖树

设 $S$ 是双倍维度为 $D$ 的度量空间 $(U, dist)$ 中的 $n$ 个点的集合。算法采用了增强版的覆盖树数据结构。

2.1 原始覆盖树

概念上,$S$ 的覆盖树 $T$ 是一棵无限树,每个节点对应 $S$ 中的一个点,$S$ 中的每个点与一个或多个节点关联。树的层级由整数索引,从根节点向叶子节点递减。对于层级 $\ell \in (-\infty, +\infty)$,$T_{\ell}$ 是层级为 $\ell$ 的节点集合,$pts(T_{\ell})$ 是与 $T_{\ell}$ 中的节点关联的点的集合,这些点要求是不同的。

每个节点 $u \in T$ 维护以下信息:
- 关联的点 $(u.point)$
- 指向其父节点的指针 $(u.parent)$
- 指向其子节点的指针列表 $(u.children)$
- 其在 $T$ 中的层级 $(u.level)$

对于每个层级 $\ell$,集合 $T_{\ell}$ 必须满足以下三个属性:
1. $pts(T_{\ell}) \subseteq pts(T_{\ell - 1})$
2. 对于每个 $u \in T_{\ell}$,$dist(u, u.parent) \leq 2^{\ell + 1}$
3. 对于所有 $u, v \in T_{\ell}$,$dist(u, v) > 2^{\ell}$

设 $d_{min}$ 和 $d_{max}$ 分别表示 $S$ 中两点之间的最小和最大距离,定义 $\Delta = d_{max} / d_{min}$ 为 $S$ 的纵横比。可以看出,对于每个 $\ell < \log_2 d_{min}$,$pts(T_{\ell}) = S$;对于每个 $\ell \geq \log_2 d_{max}$,$|pts(T_{\ell})| = 1$。定义 $\ell_{min}$(分别地,$\ell_{max}$)为使得 $pts(T_{\ell}) = S$(分别地,$|pts(T_{\ell})| = 1$)的最大(分别地,最小)索引。

更新操作依赖于覆盖集的概念。对于任何点 $p \in U$ 和每个索引 $\ell \leq \ell_{max}$,覆盖集 $Q_p^{\ell} \subseteq T_{\ell}$ 定义如下:
- $Q_p^{\ell_{max}} = {r}$
- 对于 $\ell < \ell_{max}$,$Q_p^{\ell} = {u \in T_{\ell}: u.parent \in Q_p^{\ell + 1} \land dist(u, p) \leq 2^{\ell + 1}}$

可以证明,对于任何节点 $u \in T_{\ell} - Q_p^{\ell}$,$dist(p, u) > 2^{\ell + 1}$。直观上,$Q_p^{\ell}$ 包含了 $T_{\ell}$ 中在该层级规定的尺度下与 $p$ 有点“接近”的所有点。

以下是覆盖树层级属性的表格总结:
| 属性 | 描述 |
| ---- | ---- |
| $pts(T_{\ell}) \subseteq pts(T_{\ell - 1})$ | 层级 $\ell$ 的点集是层级 $\ell - 1$ 点集的子集 |
| $dist(u, u.parent) \leq 2^{\ell + 1}$ | 节点与其父节点的距离限制 |
| $dist(u, v) > 2^{\ell}$ | 同一层级节点间的距离限制 |

覆盖树的层级关系可以用以下 mermaid 流程图表示:

graph LR
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    A(T<sub>ℓ<sub>max</sub></sub>):::process --> B(T<sub>ℓ<sub>max</sub> - 1</sub>):::process
    B --> C(T<sub>ℓ<sub>max</sub> - 2</sub>):::process
    C --> D(...):::process
    D --> E(T<sub>ℓ<sub>min</sub></sub>):::process
2.2 覆盖集大小与双倍维度的关系

对于每个点 $p \in U$ 和 $\ell \leq \ell_{max}$,有 $|Q_p^{\ell}| \leq 4^D$ 且 $\sum_{u \in Q_p^{\ell}} |u.children| \leq 12^D$。

证明过程如下:对于每个 $u_1, u_2 \in T_{\ell}$,有 $dist(u_1, u_2) > 2^{\ell}$。并且,$pts(Q_p^{\ell}) \subseteq B(p, 2^{\ell + 1}) \cap T_{\ell}$。根据前面提到的事实,可得 $|Q_p^{\ell}| \leq (2 \cdot 2^{\ell + 1} / 2^{\ell})^D = 4^D$。此外,对于每个 $u \in Q_p^{\ell}$ 和每个 $u’ \in u.children$,有 $dist(u’, p) \leq dist(u’, u) + dist(u, p) \leq 2^{\ell} + 2^{\ell + 1} = 3 \cdot 2^{\ell}$,因此 $u’.point \in B(p, 3 \cdot 2^{\ell}) \cap pts(T_{\ell - 1})$。再次根据前面的事实,可得 $|{u’ \in u.children \text{ s.t. } u \in Q_p^{\ell}}| \leq (2 \cdot 3 \cdot 2^{\ell} / 2^{\ell - 1})^D = 12^D$。

2.3 覆盖树的表示

维护一个指向 $T$ 的根节点 $r$ 的指针,$r.level = \ell_{max}$。原始的覆盖树表示(隐式表示)需要 $O(n \log \Delta)$ 的空间。为了节省空间,使用更紧凑的表示(显式表示),其中单孩子节点链(对应于同一个点的实例)仅由链的第一个节点表示,该节点继承链的最后一个节点的子节点。这种紧凑表示只需要 $O(n)$ 的空间。

给定一个点 $p \in U$,可以通过显式表示的覆盖树以自顶向下的方式构建覆盖集 $Q_p^{\ell}$,只需重新创建收缩的隐式节点链。根据前面的结论,$Q_p^{\ell}$ 可以在 $O(12^D)$ 时间内从 $Q_p^{\ell + 1}$ 构建。

2.4 增强基本结构

对覆盖树数据结构进行增强,在其节点上维护两个额外的数据字段。假设在全集 $U$ 上定义了一个拟阵 $M = (U, I)$。$S$ 相对于 $M$ 的增强覆盖树 $T$ 是一棵覆盖树,其中每个节点 $u \in U$ 存储以下两个额外字段:
- 正权重 $u.weight = |S_u|$,其中 $S_u$ 是与以 $u$ 为根的子树中的节点关联的 $S$ 中的点的子集。
- 点集 $u.mis$,它是由 $S_u$ 的子集生成的子拟阵 $M_u = (S_u, I_u)$ 的最大独立集。

$T$ 的大小变为 $O(n \cdot rank(M))$,其中 $rank(M)$ 表示 $S$ 的最大独立集的大小。对于不需要拟阵信息的应用,字段 $u.mis$ 始终设置为 null,此时 $T$ 的大小为 $O(n)$。

3. 增强覆盖树的动态维护

设 $T$ 是 $S$ 的 $n$ 个点的增强覆盖树,下面介绍当点 $p$ 被添加到或从 $S$ 中删除时如何高效更新 $T$。

3.1 插入操作

插入新点 $p$ 的步骤如下:
1. 若 $p$ 与根节点 $r$ 的距离 $dist(p, r) > 2^{\ell_{max}}$,则将 $\ell_{max}$ 和 $r.level$ 增加到 $\lfloor \log_2 dist(p, r) \rfloor$。
2. 创建一个显式节点 $u$,设置 $u.point = p$,$u.weight = 1$,$u.mis = {p}$。
3. 为了确定 $u$ 应放置的层级 $\ell(p)$,计算所有 $\ell \in [\overline{\ell}, \ell_{max}]$ 的覆盖集 $Q_p^{\ell}$,其中 $\overline{\ell}$ 是 $(-\infty, \ell_{max}]$ 中使得 $Q_p^{\overline{\ell}} = \varnothing$ 的最大索引,且 $\overline{\ell} \geq \lceil \log_2 dist(p, S) \rceil - 2$。
4. 将 $u.level$ 设置为最小的索引 $\ell(p) \geq \overline{\ell}$,使得 $dist(p, pts(Q_p^{\ell(p)})) > 2^{\ell(p)}$ 且 $dist(p, pts(Q_p^{\ell(p) + 1})) \leq 2^{\ell(p) + 1}$。
5. 确定 $Q_p^{\ell(p) + 1}$ 中任意一个满足 $dist(p, v) \leq 2^{\ell(p) + 1}$ 的节点 $v$。设 $q = v.point$。
- 若 $v$ 在层级 $\ell(p)$ 没有显式的自孩子节点,则创建一个新节点 $w$,设置 $w.point = q$,$w.level = \ell(p)$,$w.children = v.children$,并将 $v.children$ 设置为 ${u, w}$。
- 若 $v$ 在层级 $\ell(p)$ 有显式的自孩子节点 $w$,则将 $u$ 作为 $v$ 的另一个孩子节点添加。
6. 遍历从新添加的节点 $u$ 到根节点 $r$ 的路径,对于 $u$ 的每个祖先 $v$,将 $v.weight$ 增加 1,并在 $v.mis \cup {p}$ 仍然是独立集的情况下,将 $p$ 添加到独立集 $v.mis$ 中。

插入操作的时间复杂度为 $O(12^D \log \Delta)$,其中 $D$ 是度量空间的双倍维度,$\Delta$ 是 $S$ 的纵横比。

插入操作的步骤可以用以下列表总结:
1. 检查与根节点的距离并调整层级
2. 创建新节点
3. 计算覆盖集
4. 确定新节点层级
5. 处理父节点和自孩子节点
6. 更新祖先节点信息

插入操作的流程可以用 mermaid 流程图表示:

graph LR
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    A(开始):::process --> B{dist(p, r) > 2<sup>ℓ<sub>max</sub></sup>?}:::process
    B -- 是 --> C(增加 ℓ<sub>max</sub> 和 r.level):::process
    B -- 否 --> D(创建节点 u):::process
    C --> D
    D --> E(计算 Q<sup>p</sup><sub>ℓ</sub>):::process
    E --> F(确定 ℓ(p)):::process
    F --> G(确定节点 v):::process
    G --> H{w 存在?}:::process
    H -- 是 --> I(添加 u 为 v 孩子):::process
    H -- 否 --> J(创建 w):::process
    J --> K(设置 v.children):::process
    I --> L(更新祖先节点):::process
    K --> L
    L --> M(结束):::process

双倍度量空间中的全动态聚类与多样性最大化

3. 增强覆盖树的动态维护(续)
3.2 删除操作

删除点 $p$ 的步骤如下:
1. 第一阶段(自顶向下)
- 计算所有 $\ell \in [\overline{\ell}, \ell_{max}]$ 的覆盖集 $Q_p^{\ell}$,其中 $\overline{\ell} \leq \ell_{max}$ 是显式树中对应于 $p$ 的叶子节点的层级。
- 创建一个空列表 $R_{\overline{\ell}}$,用于存储在层级 $\overline{\ell}$ 需要重新定位的显式节点。
2. 第二阶段(自底向上,对于 $\ell = \overline{\ell}, \overline{\ell} + 1, \cdots, \ell_{max} - 1$)
- 处理覆盖集节点
- 若 $Q_p^{\ell}$ 包含节点 $u$ 且 $u.point = p$ 且 $u.level = \ell$:
- 若 $u$ 是 $v$ 的自孩子节点(即 $v.point = u.point = p$),则从 $T$ 中移除 $u$,将 $u$ 的兄弟节点从 $v$ 分离并添加到 $R_{\ell}$($v$ 将在迭代到 $v.level$ 时被移除)。
- 若 $u$ 不是 $v$ 的自孩子节点,但它是 $v$ 除自孩子节点外的唯一孩子节点,则从 $T$ 中移除 $u$,并在显式树中将 $v$ 与其自孩子节点合并。
- 重新定位节点
- 创建一个空列表 $R_{\ell + 1}$。
- 顺序扫描 $R_{\ell}$,对于每个 $w \in R_{\ell}$,在 $Q_p^{\ell + 1} \cup R_{\ell + 1}$ 中搜索节点 $w’$ 使得 $d(w, w’) \leq 2^{\ell + 1}$。
- 若不存在这样的节点 $w’$,则将 $w$ 添加到 $R_{\ell + 1}$,并将 $w.level$ 提升到 $\ell + 1$。
- 若找到节点 $w’$:
- 若 $w’$ 是内部节点且其孩子节点在层级 $\ell$,则将 $w$ 作为 $w’$ 的另一个孩子节点添加。
- 否则,创建一个新的显式节点 $z$,设置 $z.point = w’.point$,$z.level = \ell$,$z.children = w’.children$,并将 $w’.children$ 设置为 ${z, w}$。
- 更新节点字段
- 对于 $Q_p^{\ell + 1} \cup R_{\ell + 1}$ 中所有层级为 $\ell + 1$ 的节点 $w$,根据其孩子节点的相应字段值更新 $w.weight$ 和 $w.mis$ 字段。更新 $w.weight$ 字段很直接,而根据相关结论,更新 $w.mis$ 字段可以通过计算 $w$ 的孩子节点的 $mis$ 字段元素的并集的最大独立集来完成。
3. 特殊处理 $\ell = \ell_{max}$
- 可能需要修改 $\ell_{max}$ 和/或创建新的根节点,以防 $p = r.point$。

删除操作的时间复杂度为 $O((16^D + 12^D rank(M)) \log \Delta)$,其中 $D$ 是度量空间的双倍维度,$\Delta$ 是 $S$ 的纵横比。

删除操作的步骤可以用以下列表总结:
1. 自顶向下计算覆盖集和初始化重定位列表
2. 自底向上处理节点:
- 处理覆盖集内的节点
- 重新定位需要移动的节点
- 更新节点的权重和独立集字段
3. 特殊处理最高层级

删除操作的流程可以用 mermaid 流程图表示:

graph LR
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    A(开始):::process --> B(自顶向下计算 Q<sup>p</sup><sub>ℓ</sub> 和初始化 R<sub>ℓ</sub>):::process
    B --> C{ℓ = ℓ<sub>max</sub> - 1?}:::process
    C -- 否 --> D(处理 Q<sup>p</sup><sub>ℓ</sub> 节点):::process
    D --> E(重新定位 R<sub>ℓ</sub> 节点):::process
    E --> F(更新节点字段):::process
    F --> G(ℓ = ℓ + 1):::process
    G --> C
    C -- 是 --> H(特殊处理 ℓ = ℓ<sub>max</sub>):::process
    H --> I(结束):::process
4. 从增强覆盖树中提取解决方案

可以利用前面介绍的增强覆盖树来为各种问题提取准确的解决方案,这些问题依赖于从覆盖树中提取一个小的 $(\epsilon, k)$ - 核心集(见定义),其中 $\epsilon$ 和 $k$ 取合适的值。

4.1 构建 $(\epsilon, k)$ - 核心集

设 $T$ 是来自双倍维度为 $D$ 的度量空间的 $n$ 个点的集合 $S$ 的增强覆盖树。给定 $\epsilon$ 和 $k$,可以按以下方式构建 $S$ 的 $(\epsilon, k)$ - 核心集:
- 设 $T_{\ell(k)}$ 是(在 $T$ 的隐式表示中)最大索引的层级,使得 $|T_{\ell(k)}| \leq k$ 且 $|T_{\ell(k) - 1}| > k$。
- 定义 $\ell^*(\epsilon, k) = \max{\ell_{min}, \ell(k) - \lceil \log_2(8 / \epsilon) \rceil}$。

集合 $pts(T_{\ell^*})$ 是 $S$ 的 $(\epsilon, k)$ - 核心集,其大小至多为 $k(64 / \epsilon)^D$,并且可以在时间 $O(k((64 / \epsilon)^D + \log \Delta))$ 内构建。

构建 $(\epsilon, k)$ - 核心集的步骤可以用以下列表总结:
1. 确定满足条件的层级 $\ell(k)$
2. 计算 $\ell^ (\epsilon, k)$
3. 提取 $pts(T_{\ell^
})$

构建核心集的流程可以用 mermaid 流程图表示:

graph LR
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    A(开始):::process --> B(确定 ℓ(k)):::process
    B --> C(计算 ℓ*):::process
    C --> D(提取 pts(T<sub>ℓ*</sub>)):::process
    D --> E(结束):::process
4.2 解决 $k$ - 中心问题

假设存在 $S$ 的增强覆盖树 $T$,可以按以下方式计算 $S$ 上 $k$ - 中心问题的 $O(2 + O(\epsilon))$ - 近似解 $C$:
1. 提取核心集 :提取核心集 $Q = pts(T_{\ell^ })$,其中 $\ell^ = \ell^ (\epsilon, k)$ 是前面定义的索引。
2.
构建广义覆盖树
- 定义 $(\alpha, \beta)$ - 覆盖树,其每个层级 $\ell$ 需满足的三个属性重新表述为:
- $pts(T_{\ell}) \subseteq pts(T_{\ell - 1})$
- 对于每个 $u \in T_{\ell}$,$dist(u, u.parent) \leq \beta \cdot \alpha^{\ell + 1}$
- 对于所有 $u, v \in T_{\ell}$,$dist(u, v) > \beta \cdot \alpha^{\ell}$
- 对于给定的整数参数 $m$,为核心集 $Q$ 构建 $m$ 个广义覆盖树,即对于 $1 \leq i \leq m$,构建 $(\alpha, \alpha^{i / m})$ - 覆盖树 $T^{(i)}$。每个覆盖树通过逐个插入 $Q$ 中的点来构建。
3.
选择解决方案 *:
- 设 $\ell_i$ 是使得 $T^{(i)}$ 中层级 $T^{(i)} {\ell_i}$ 至多有 $k$ 个节点的最小索引。
- 返回的解决方案 $C$ 是使得 $T^{(i)}
{\ell_i}$ 最小化 $\alpha^{\ell_i + i / m}$ 的集合 $pts(T^{(i)}_{\ell_i})$。

通过选择 $\alpha = 2 / \epsilon$ 和 $m = O(\epsilon^{-1} \ln \epsilon^{-1})$,可以证明 $C$ 是 $Q$ 上 $k$ - 中心问题的 $(2 + O(\epsilon))$ - 近似解。整个过程可以在时间 $O((k / \epsilon)(768 / \epsilon)^D \log \Delta)$ 内实现。

解决 $k$ - 中心问题的步骤可以用以下列表总结:
1. 从增强覆盖树中提取核心集
2. 构建多个广义覆盖树
3. 选择最优的层级节点集合作为解决方案

解决 $k$ - 中心问题的流程可以用 mermaid 流程图表示:

graph LR
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    A(开始):::process --> B(提取核心集 Q):::process
    B --> C(构建 m 个广义覆盖树 T<sup>(i)</sup>):::process
    C --> D(确定 ℓ<sub>i</sub>):::process
    D --> E(选择最小化 α<sup>ℓ<sub>i</sub> + i/m</sup> 的 pts(T<sup>(i)</sup><sub>ℓ<sub>i</sub></sub>)):::process
    E --> F(返回解决方案 C):::process
    F --> G(结束):::process

通过上述增强覆盖树的构建、维护和解决方案提取方法,可以有效地解决双倍度量空间中的全动态聚类与多样性最大化等相关问题。这些方法在处理大规模数据和动态数据更新时具有较好的性能和准确性。

随着信息技术在管理上越来越深入而广泛的应用,作为学校以及一些培训机构,都在用信息化战术来部署线上学习以及线上考试,可以线下的考试有机的结合在一起,实现基于SSM的小码创客教育教学资源库的设计实现在技术上已成熟。本文介绍了基于SSM的小码创客教育教学资源库的设计实现的开发过程。通过分析企业对于基于SSM的小码创客教育教学资源库的设计实现的需求,创建了一个计算机管理基于SSM的小码创客教育教学资源库的设计实现的方案。文章介绍了基于SSM的小码创客教育教学资源库的设计实现的系统分析部分,包括可行性分析等,系统设计部分主要介绍了系统功能设计和数据库设计。 本基于SSM的小码创客教育教学资源库的设计实现有管理员,校长,教师,学员四个角色。管理员可以管理校长,教师,学员等基本信息,校长角色除了校长管理之外,其他管理员可以操作的校长角色都可以操作。教师可以发布论坛,课件,视频,作业,学员可以查看和下载所有发布的信息,还可以上传作业。因而具有一定的实用性。 本站是一个B/S模式系统,采用Java的SSM框架作为开发技术,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐的特点,使得基于SSM的小码创客教育教学资源库的设计实现管理工作系统化、规范化。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值