反阿克曼函数

概述

反阿克曼函数 是一个增长极其缓慢的函数,是不相交集合数据结构在使用按秩合并 + 路径压缩时复杂度分析的核心。它增长得如此之慢,以至于对所有实际可能的输入规模,,因此在实践中可以视为常数。

定义

快速增长函数

快速增长函数的递归定义

对整数 ,定义 如下:

其中 表示 次复合。

前几层的展开

含义
线性函数
指数函数
个 2)2 的幂塔,高度
幂塔的幂塔…,增长速度已无法用常规记号表达
远超任何可想象的计算

反阿克曼函数 的定义

反阿克曼函数

直观理解: 是使 超过 最小层数 。由于 增长得极其快, 增长得极其慢。

核心性质

数值表

的范围说明
1
2
3
4
5需要的 大到无法想象

关键事实

所有实际可能的输入规模。即使 是一个宇宙中原子数量的指数级, 仍然不超过 4。 已经是一个天文数字(远超可观测宇宙中的原子数 ),而 更是完全无法用任何物理量来比拟的。

单调性

单调性

是一个非递减函数:若 ,则

与常数的关系

实践意义

由于 对所有实际 成立,在工程实践中:

  • (实际中)
  • 可以安全地将并查集的每次操作视为
  • 但在理论分析中,必须保留 以保证严谨性

定理19.14:O(m α(n)) 上界

定理 19.14

在使用按秩合并路径压缩的不相交集合森林中,对 个元素执行 次 MAKE-SET、UNION、FIND-SET 操作的序列,总时间为

证明方法:使用势能方法

证明思路概述

  1. 势能函数定义:为每个节点 定义势能 ,基于 的秩和层数 。核心思想是将节点按秩分为不同的”级别”(level),级别越高势能越大。

  2. 关键引理:对每个级别 ,证明在该级别上发生的”代价高昂”的 FIND-SET 操作次数有上界。具体地,级别 上的节点被作为 FIND-SET 路径上的非根节点访问的次数不超过某个与 相关的量。

  3. 总代价上界:将所有级别的代价相加,利用 的快速增长性质,得到总代价

详细的证明过程见 CLRS 第4版 Section 19.4,使用了较为复杂的势能函数和分层分析技术。

下界

Fredman & Saks 1989 下界

任何基于比较的并查集实现(仅通过比较元素来决定操作),在 cell-probe 模型下,每次操作的最坏均摊代价为

这意味着 最优的——不存在渐近更快的基于比较的并查集实现。

直观理解

可以将 理解为一个”增长速度的层级体系”:

  • :加法级别(线性增长)
  • :乘法级别(指数增长)
  • :幂塔级别
  • :幂塔的迭代级别
  • 每升一级,增长速度发生质变

就是问:“要达到 这个增长水平,需要用到第几层?“答案是:几乎总是只需要前几层。这就像问”要数到 ,需要用到几位十进制数?“——答案是 ,增长极其缓慢。

第21章:最小生成树

Kruskal算法的总运行时间 O(E lg V)(排序)+ O(E α(V))(并查集操作)。由于 α(V) ≤ 4 对所有实际 V 成立,并查集部分实际上是线性时间。α(V) 出现在 Kruskal 的总时间界 O(E α(V)) 中,是并查集操作序列的均摊复杂度。

参见