有人可以直接解释为什么Ackermann函数http://en.wikipedia.org/wiki/Ackermann_function与用于不相交集http://en.wikipedia.org/wiki/Disjoint-set_data_structure的联合查找算法的摊销复杂性有关吗?
Tarjan的数据结构书中的分析不是很直观。
我也在算法导论中查了一下,但它看起来也太严谨和不直观了。
感谢您的帮助!
答案 0 :(得分:2)
(关于发现和结合)这两个 技术相辅相成; 共同应用,摊销时间 每个操作只有O(α(n)),其中 α(n)是函数的反函数 f(n)= A(n,n),A是极端的 快速增长的阿克曼功能。 因为α(n)与此相反 函数,α(n)小于5 远程实用值n。从而, 每个摊销的运行时间 操作实际上很小 恒定。
功能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)中运行。 当然要注意来自a 理论家的观点,一个真实的 O(e)的结果仍然是a 重大突破。 整体 图片不完整,因为 实际最佳结果表明lg * n可以 被A(p,n)的倒数所取代 其中A是Ackermann的函数,a 爆炸性增长的功能。该 阿克曼函数的逆是 与lg * n有关,并且更好 结果,但证据是均匀的 更难。强>