您的位置:首页 > 其它

求数列的逆序数对数问题

2011-08-29 17:09 176 查看
问题:对于一个数字数组,如(1,3,5,4,2),假定我们要求的是从小到大数列的逆序数对,则其中(5,4)就是一组逆序数。

解决方法:求一个数列中所有的逆序数对,可以采用递归与分治的思想,借助归并排序来完成。

一个数列的逆序数对,等于【它的两个子序列各自内部的逆序数对】与【两个数列之间的逆序数对】之和。

单独看这个思路,会觉得很很麻烦,因为还得求数列间的逆序数对。但是借助归并排序,我们可以发现,在两个数列合并的时候,从后面的那个数列中取出一个元素的时候,前面的数列中还剩余的元素个数,既是与该取出的元素逆序的元素个数。当从前面数列中取出元素的时候,不进行计算。

例:合并数列(1,3,5)与(2,4)的时候,先取出前面数列中的1,此时不计算;然后取出后面数列中的2,此时前面数列中剩余两个元素3,5,则与2逆序的数有两个;依次类推,最后可得到总逆序数对是2+1=3。

这样就解决了求【两个数列之间的逆序数对】的问题。而【它的两个子序列各自内部的逆序数对】则可以继续分为更小的数列,利用前面介绍的方法来解决。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: