随机分析

时间:2014-05-12 11:49:29

标签: algorithm binary-search-tree

我正在阅读Robert Segdewick的C ++算法中的随机二进制搜索树。

随机数发生器仍然有可能在每次机会时导致错误的决定,从而使我们得不到平衡的树木,但我们可以用数学方法分析这个机会并证明它很小。

财产13.2。 :随机BST的建设成本大于平均值α倍的概率小于e-α

例如,构建100,000个节点的随机BST需要大约230万次比较,但比较次数超过2300万次的概率远小于0.01%。这种性能保证足以满足处理这种大小的实际数据集的实际要求。当使用标准BST进行此类任务时,我们无法提供这样的保证:例如,如果数据中存在重要顺序,则我们会遇到性能问题,这在随机数据中不太可能,但在实际情况下肯定不会出现异常数据,有很多原因。

类似于Property 13.2的结果也适用于quicksort的运行时间,同样的论点。但结果在这里更为重要,因为它还意味着在树中搜索的成本接近平均值。无论构建树的任何额外成本如何,我们都可以使用标准的BST实现来执行搜索操作,其成本仅取决于树的形状,并且没有额外的成本用于平衡。此属性在典型应用程序中很重要,其中搜索操作比其他任何应用程序都要多得多。例如,前一段中描述的100,000节点BST可能包含电话目录,可能用于数百万次搜索。我们几乎可以肯定,每次搜索都会在大约23次比较的平均成本的一个小常数因子内,并且,出于实际目的,我们不必担心大量搜索的成本可能接近100,000比较,而对于标准的BST,我们需要关注。

我对上述文字的质询是

  1. 作者的意思是“我们几乎可以确定每次搜索都会在约23次比较的平均成本的一个小的常数因子内,并且,出于实际目的”。这里有什么小的常数因素。
  2. 由于

3 个答案:

答案 0 :(得分:0)

嗯,你已经提到了quicksort,这是这​​种算法的一个很好的例子。 Quicksort的最坏情况表现为O(N^2)。但是,它是全世界使用最广泛的排序算法之一。

为什么使用这样的算法? 因为最坏的情况真的很少见。非常罕见,即使它出现一次或两次也值得使用该算法。它可以比保证解决方案更容易实现,它可以更好地与当代硬件(缓存)等合作。 / p>

使用quicksort而不是heapsort通常会更好,即使heapsort理论上更好(在最坏的情况下消耗O(1)额外内存和O(N log N)时间。

所以,在我看来,这本书想说随机BST值得使用,即使事情可能会向南发展。仅仅因为这种情况的概率确实非常低。在实时系统的关键部分使用这种结构并不是一个好主意。但是,对于普通应用程序,使用随机结构可能会有所帮助。因为与自平衡树一样好的概率非常高。因为你节省了很多时间而不编码自平衡。 CPU时间便宜,开发人员的时间很长。

就个人而言,我在编写union-find时使用随机方法。对于保证最坏情况的复杂性,您应该将较小的集合加入较大的集合,我随机执行此操作。它节省了几行,一些记忆,我没有注意到实际中随机版和保证版之间的差异。

答案 1 :(得分:0)

因此,概率分布将是二项分布,对于大数而言,其具有一些均值和方差近似正态。所以他的命题在概念上等同于Chebyshev's Inequality

基本上,它说分布的尾部小于一定数量,并且大部分分布在距离中心一定距离内。

答案 2 :(得分:0)

这是一个特定的界限。修复jn以及1 <= j <= n。想象一下元素1..n上的随机BST,并且对于所有k >= 0,让T(k)为以j的祖先为根的子树的大小,其深度为k(如果0的深度小于j,则为k。然后,

T(0) = n
E[T(k) | T(k - 1)] <= (3/4) T(k - 1),

通过以下逻辑。设m = T(k - 1)并假设m > 0。在i种可能性中统一选择等级m的子树根。在最坏的情况下,j位于较大的子树中,因此T(k) <= max(i - 1, m - 1 - i)。计算期望,

E[T(k) | m] <= sum_{i : 1 <= i <= m} max(i - 1, m - 1 - i)/m
             = sum_{i : 1 <= i <= m - floor(m/2) - 1} (m - 1 - i)/m
                 + [m even] ((m - 1)/2)/m
                 + sum_{i : floor(m/2) + 1 <= i <= m} (i - 1)/m
             = sum_{i : floor(m/2) + 1 <= i <= m} 2 (i - 1)/m
                 + [m even] (m - 1)/(2 m)
             = floor(m/2) (floor(m/2) + m - 1)/m
                 + [m even] (m - 1)/(2 m).

如果m是偶数,那么界限是

(m/2) (m/2 + m - 1)/m + (m - 1)/(2 m) = (3 m/2 - 1)/2 + 1/2 - 1/(2 m)
                                      < (3/4) m.

如果m为奇数,则界限为

((m - 1)/2) ((m - 1)/2 + m - 1)/m < (m/2) (m/2 + m)/m = (3/4) m.

现在,通过期望的线性,我们计算

E[T(k)] <= (3/4)^k n.

当且仅当k时,二元搜索在T(k) >= 1比较后才有效。很明显

Pr(T(k) >= 1) <= E[T(k)],

,以更一般的形式,被称为马尔可夫的不等式。如果我们设置k = 3 log_{4/3} n ~ 7.23 lg n = O(log n),则搜索仍处于活动状态的概率最多为(3/4)^k = n^-3。联盟绑定了所有元素,某些元素太深的概率最多为n^-2。到n = 1e5时,这已经超过了十亿分之一。