问题描述
|
谁能给我一个直观的解释,为什么Ackermann函数http://en.wikipedia.org/wiki/Ackermann_function为什么与用于不相交集的联合查找算法的摊销复杂度有关http://en.wikipedia.org/ wiki / disjoint-set_data_structure?
Tarjan的数据结构书中的分析不是很直观。
我也在“算法导论”中进行了查找,但它似乎也过于严格和不直观。
谢谢你的帮助!
解决方法
适用于不相交的森林
来自维基百科
(关于查找和并集)这两个
技术互相补充;
一起应用,摊销时间
每个操作只有O(α(n)),其中
α(n)是函数的反函数
f(n)= A(n,n),而A是极
快速增长的阿克曼功能。
因为α(n)是这个的倒数
函数,所有的α(n)小于5
n的实际值从而,
每台的摊销运行时间
操作实际上很小
不变。
那为什么是阿克曼呢?
来自Kruskal算法
函数lg * n
请注意,lg * n的增长非常缓慢
功能,比lg n慢得多。在
事实比lg lg n慢
lg n的有限组成。它是
函数f(n)的逆= 2
^ 2 ^ 2 ^…^ 2,n次。对于n> = 5,f(n)
大于中的原子数
宇宙。因此,出于所有意图
和目的,f(n)的逆
n的任何实际值都是常数。
从工程师的角度来看,
Kruskal的算法在O(e)中运行。
当然要注意的是
理论家的观点,真实的
O(e)的结果仍然是
重大突破。整体
图片不完整,因为
实际最佳结果表明lg * n可以
被A(p,n)的倒数代替
其中A是阿克曼函数,
爆炸性增长的功能。的
阿克曼函数的反函数是
与lg * n有关,并且更好
结果,但证明是均匀的
更难。