Mryqu's Notes


  • 首页

  • 搜索
close

[算法] 求数组中倒置个数

时间: 2014-02-19   |   分类: Algorithm.DataStruct     |   阅读: 43 字 ~1分钟

http://algs4.cs.princeton.edu/22mergesort/中有一道题是求数组中倒置个数的,原题如下:

Inversions. Develop and implement alinearithmic algorithm Inversions.java forcomputing the number of inversions in a given array (the number ofexchanges that would be performed by insertion sort for thatarray). This quantity is related tothe Kendall tau distance; 

解决思路: [算法] 求数组中倒置个数 Inversions.java在做MergeSort的过程中顺便求出了数组中倒置个数。假设上图中已经获得左右两个子部分中的倒置个数并进行了MergeSort。现在学习一下做整个数组的Merge时如何顺便计算这一层的倒置个数。

  • 当aux[0]和aux[5]进行比较时,A小于E,则可知A比左半部分都小(少比较了4次),倒置+5
  • 当aux[0]和aux[6]进行比较时,C小于E,则可知C比左半部分都小(少比较了4次),倒置+5
  • 当aux[2]和aux[7]进行比较时,E小于G,则可知E比左半部分中G及其之后的数都小(少比较了2次),倒置=+(4-2+1)=+3

整个数组的倒置数为左边部分内部倒置数+右边部分内部倒置数+13。算法时间复杂度为NlogN。

标题:[算法] 求数组中倒置个数
作者:mryqu
声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!

#algorithm# #inversion# #mergesort# #nlogn#
[算法] Mergesort练习
Markdown介绍
  • 文章目录
  • 站点概览

Programmer & Architect

662 日志
27 分类
1472 标签
GitHub Twitter FB Page
© 2009 - 2023 Mryqu's Notes
Powered by - Hugo v0.120.4
Theme by - NexT
0%