逆序对计数算法 -- 分治策略的应用
来源:互联网 发布:火凤凰软件下载 编辑:程序博客网 时间:2024/05/17 00:57
1、逆序对的定义
逆序对即序列中ai与aj,i<j,但是ai>aj,—— 就是序列排列在前面的元素,大于后面的元素。
2、朴素算法
2.1 算法描述
逆序对的朴素算法即暴力法,针对每个元素,遍历该元素后续的所有元素查找计算相当该元素的逆序对,如下图所示:
2.2 算法分析
时间复杂度O(n^2),空间复杂度O(1)
3、归并排序法 -- 分治法
3.1 算法描述
采用归并排序的方法,将原问题划分成两个规模只有一半的子问题,分别求出各自的逆序对个数,最后加上两段之间的逆序对数,即是全部的逆序对数。
归并排序过程会对每个子问题进行排序,之后合并子问题的解。在合并解的过程中,可以计算逆序对,复杂度即O(n)。
具体实现待...
3.2 算法分析
分治法顾名思义,分而治之,将原问题划分成n个规模较小的问题,分别求解,最后通过合并得到的各子问题的解求出原问题的解。可以表示成如下递归式的概念:
根据主定理公式(CLRS 第4章)
在本例中有如下推论:
注意:分治后a和b的取值以及子问题解合并算法的复杂度f(n)之间的关系,如果分治后这3者的关系得到的原问题复杂度并没有减少,此时不宜采用分治法!
这方面的例子参考《算法设计》第5章分治策略5.5节整数乘法的第一种分治法:
两大整数乘法朴素算法复杂度是n^2,分治后得到4个子问题,每个子问题规模是原问题的1/2,解合并的复杂度是o(n),此时根据主定理得到的分治算法的复杂度同样是O(n^2),相比朴素算法没有任何的减少,徒增了计算的复杂性!
- 逆序对计数算法 -- 分治策略的应用
- 分治求逆序对算法
- 算法导论第2章(4) 分治法的应用 找逆序对 (习题2-4)
- 【分治策略】逆序对问题总结
- 利用分治算法,来完成逆序对的查找
- 逆序数的分治算法
- 分治算法之排序和逆序对
- 【算法-分治策略应用】循环赛日程表问题
- 1164: 分治 逆序对
- 分治法的应用-求逆序数
- 数组中的逆序对——分治法(归并排序的应用)
- 求逆序数的分治算法
- 求逆序数的分治算法
- 【算法导论】2-2 二路归并排序(分治)merge-sort 和逆序对的问题
- 找最近点对问题-分治算法的应用
- 找最近点对问题-分治算法的应用
- C++ 分治算法-归并排序与逆序对
- 逆序对的nlgn算法
- Oracle EBS Shipping(WSH)模块日志收集方法
- 【杂牌互联网产品观察员的一天】没干什么,朋友来了——继续陪着!
- C#.NET 获取拨号连接 宽带连接
- 成熟的标志
- 利用 Acronis Disk Director Suite 进行win7 分区
- 逆序对计数算法 -- 分治策略的应用
- Oracle EBS WIP模块Debug Log收集方法
- microsoft sql server 2008在64位win7上安装后服务器名称为空的解决办法
- 抽象类与接口的应用
- Oracle EBS RCV模块日志收集方法
- dzx2.5伪静态方法
- 【ACM入门一】1002 HDU2019
- Oracle MSCA(Mobile Supply Chain Application) Debug Log & SQL Trace
- 启动 Script Debugger