浙江省高等学校教师教育理论培训

微信搜索“毛凌志岗前心得”小程序

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

胜者树败者树 - 就像以往 - 51CTO技术博客

胜者树败者树
2010-06-01 01:05:04

胜者树则是常见的归并完全二叉树形式。

题:给定一个数组array,长度为16。如何采用最少的比较次数找出第二大的元素?

1. 直观方法是通过两次冒泡排序,15+14=29 次比较可找到第二大的元素。然而直观方法显然没有应用到一些已经比较过的信息。

2. 采用归并排序,构造胜者树。与该胜者比较过的元素有4个,只需要对这些元素进行比较即可,共比较次数15(胜者树)+ (4-1)=18 次比较。

 

败者树在外排序的k路平衡归并中使用,它是一个完全二叉树,其非叶节点为比较中的败者。根节点为最后一次比较的败者。最终胜利者则被直接输出(或到输出缓冲区)。

败者树的引入是因为:k路平衡归并中,若不使用败者树,则对每次对k路需要比较k-1次得到最值,对于总共n个记录的每一趟归并共需要(n-1)*(k-1)次比较。若有m个归并初始段,归并趟数为logk(m) ,总共比较次数logk(m)*(n-1)*(k-1)。引入败者树(由k个元素构造成败者树)则每次不需要k-1次比较,只需要log2(k)次即可。

posted on 2013-04-02 20:54  lexus  阅读(244)  评论(0编辑  收藏  举报