找出n个元素集合中的第k大(小)元素的判定树复杂度

所谓判定树复杂度,就是在最坏输入情况下树的最短深度。

易知当k=1时,判定树复杂度D(f)=n-1(除了最大的元素其他元素至少要输n-1次),此时叶节点数共有2^(n-1)个;

k=2时,判定树复杂度D(f)=n-1+[lg(n-1)](下取整);

1)利用counting leaves. 

在找出第二大元素时必然会同时找出最大元素,在找出最大元素后,删除最大元素与其他元素进行比较的分支,可得叶节点2^(n-2)个,又最大元素可能的情况有n种,所以叶节点共有n*2^(n-1)个,于是可得D(f).

2)adversary argument

首先两两进行比较,每次淘汰较小的数,则经过n-1次可得出最大的数,此时会形成深度为[lg(n-1)](下取整)+1的树,然后用相同的方法至少需要[lg(n-1)](下取整)+1-1次比较。

 

对于任意k,D(f)≥(n-k)+[lg(Ck-1n)](C_(k-1)n 下取整)

对于L={x1,...,x(k-1)}表示the first k-1 largest element, so 删除L中元素与X\L中元素 的比较分支后形成的子树叶节点有2^(n-k)个,又知有(k-1)个这样的子树,故共有叶节点(k-1)*2^(n-k)个。 

posted on 2015-08-23 19:59  水纸谷幽  阅读(958)  评论(0编辑  收藏  举报

导航