2013年3月15日

以中位数为基准的选择问题

摘要: 问题描述:给定一个由n个互不相同的数组成的集合S,以及一个正整数k<=n,设计一个O(n)时间的算法找到S中最接近S的中位数的k个数。解决思路:1、找出S的中位数median;2、计算T={|x-median| | x属于S};3、找出T中的第k小元素y;4、根据y找出索要的解{x属于S | |x=median| <= y};时间复杂度分析:1、3需要时间O(n)。2、4需要O(n)时间,因此最坏时间为O(n) 阅读全文

posted @ 2013-03-15 21:55 愤怒的屎壳螂 阅读(262) 评论(0) 推荐(0) 编辑

线性时间选择:从n个元素中找出第k小的元素

摘要: 一、解决该问题的一般思路是:将数组a[p,r]分成两个字数组a[p,i]和a[i+1,r],使a[p,i]中的每一个元素都大于a[i+1,r]中的元素,接着算法计算字数组a[p,i]中的元素个数j,如果k<=j则a[p,r]中第k小的元素落在子数组a[p,i]中;如果k>j则第k小元素落在字数组a[i+1,r]中,只要找a[i+1,r]中第k-r小的元素;该算法成为RandomizedSelect方法,划分函数RandomizedPartition生成一个p和r之间的随机整数,RandomizedPartition产生的划分基准是随机的,可以证明,该算法可以在O(n)平均时间内找到 阅读全文

posted @ 2013-03-15 20:59 愤怒的屎壳螂 阅读(1324) 评论(0) 推荐(1) 编辑

导航