模糊排序问题(Fuzzy sort)

clrs problem 7-6  问题如下

考虑这样的一种排序问题,即无法准确地知道待排序的各个数字到底是多少。对于其中的每个数字,我们只知道它落在实轴上的某个区间内。亦即,给定的是 n个形如[ai, bi]的闭区间,其中ai<= bi。算法的目标是对这些区间进行模糊排序(fuzzy-sort),亦即,产生各区间的一个排列<i1, i2, ..., in>,使得存在一个cj属于区间[aij, bij],满足c1 <= c2 <= ... <= cn
a) 为n个区间的模糊排序设计一个算法。你的算法应该具有算法的一般结构,它可以快速排序左部端点(即各ai),也要能充分利用重叠区间来改善运行时间。(随着各区间重叠得越来越多,对各区间进行模糊排序的问题会变得越来越容易。你的算法应能充分利用这种重叠。)

b) 证明:在一般情况下,你的算法的期望运行时间为Θ(nlgn),但当所有的区间都重叠时,期望的运行时间为Θ(n)(亦即,当存在一个值x,使得对所有的 i,都有x∈[ai, bi])。你的算法不应显式地检查这种情况,而是应随着重叠量的增加,性能自然地有所改善。

 

读一遍题目居然没读懂什么意思~ 

其实就是对区间进行排序, 排序的标准 只要保证当 “大区间”中存在元素大于“小区间” 就ok了。

当两个区间不相交时, 这样的“大小”关系可以简单的通过比较端点值确定,  但当有交集时,  怎么办呢

相交的时候 在交集中任意取两个不同的元素都可以说是 来自两个区间的, 因此相交时候俩区间可以是任意大小,也就是说 相交的区间之间不必排序,以此来降低时间开销。

下面有个完整的算法描述和实现

http://blog.csdn.net/xianliti/archive/2009/12/09/4974130.aspx

posted @ 2010-04-04 22:03  donj  阅读(1409)  评论(0编辑  收藏  举报