博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
归并排序求逆序对
阅读量:6084 次
发布时间:2019-06-20

本文共 1208 字,大约阅读时间需要 4 分钟。

归并排序求逆序对

by mps

  【1】什么是逆序对?

      对于一个数列需要按从小到大排序,如果有ai,aj且满足ai>aj和i<j则ai,aj为一组逆序对

  【2】如何求逆序对?

       我们发现,我们可以暴力枚举i,j,然后逐一判断并累加答案即可,时间复杂度O(N2)

       但是对于数据量大一点的题目,只有不断地TLE了→_→

  【3】归并排序求逆序对

       逆序对的定义(见【1】)是一组本应该有序的序列中的逆序对,那么我们就想到了排序,但由于是要22匹配,我们又想到了归并排序

       归并排序大致内容如下:

             将一组数据先不断分割,直到分为一个一组,然后对于每个区间自小到大的进行有序表合并(O(N)),然后向上回溯,主体思想是分治

       我们发现,在合并的时候,如果出现有一组合并错误

(即不是直接A然后紧跟B,而是中间有一个ai并没有在正确的位置,被b中的一个数取代了,那就证明一定有mid-i+1个逆序对,因为前面一定是有序的)

       所以求逆序对本身非常简单,只需要写一个归并排序,在合并的过程中,如果并不是插入了A的元素,而是B的,则答案类加上mid-i+1

  【4】模板

1 void Union(int l,int mid ,int r){ 2     int i=l,j=mid+1,len=l-1; 3     while(i<=mid && j<=r) 4     { 5         if(a[i]<=a[j])b[++len]=a[i++]; 6         else { 7             b[++len]=a[j++]; 8             ans+=mid-i+1; 9             ans=ans%Mod;10         }11     }12     while(i<=mid)b[++len]=a[i++];13     while(j<=r)b[++len]=a[j++];14     for(i=l;i<=r;i++)a[i]=b[i];15 }16 17 void merge_sort(int l,int r){18     if(l
>1;20 merge_sort(l,mid);21 merge_sort(mid+1,r);22 Union(l,mid,r);23 }24 }25 26 int main(){27 init();28 merge_sort(1,n);29 printf("%d",ans);30 return 0;31 }

  【5】总结

    该算法的时间复杂度由O(N2)降至O(NlogN)

    空间复杂度由O(1)升至O(N)

    空间换时间

 

转载于:https://www.cnblogs.com/maopengsen/p/4181348.html

你可能感兴趣的文章
Android程序Crash时的异常上报
查看>>
poj 1328 Radar Installation
查看>>
[家里蹲大学数学杂志]第392期中山大学2015年泛函分析考博试题回忆版
查看>>
eclipse创建多模块maven工程小结
查看>>
一些常用的c++系统函数
查看>>
Codeforces Round #296 (Div. 1) B. Clique Problem 贪心
查看>>
奇怪吸引子---LorenaMod2
查看>>
扩展Log4j支持JNDI数据源
查看>>
拉勾网董事长许单单:凡是让你痛苦的,都是让你成长的
查看>>
用java在客户端读取mongodb中的数据并发送至服务器
查看>>
html5 canvas围绕中心点旋转
查看>>
从零开始学android开发-项目打包发布
查看>>
精心收集整理的SQL Server 2014/2012/2008/2005/2000简体中文企业版下载地址
查看>>
Bootstrap <基础十八>面包屑导航(Breadcrumbs)
查看>>
lr_start_timer,lr_get_transaction_duration,lr_get_transaction_wasted_time函数使用总结
查看>>
ON THE EVOLUTION OF MACHINE LEARNING: FROM LINEAR MODELS TO NEURAL NETWORKS
查看>>
rdd.toDebugString
查看>>
MVC5 + EF6 入门完整教程
查看>>
Swing中弹出对话框的几种方式(转)
查看>>
biz处理dao事务处理层
查看>>