算法复习——分而治之篇之逆序对计数问题

算法复习——分而治之篇之逆序对计数问题

以下内容主要参考中国大学MOOC《算法设计与分析》,墙裂推荐希望入门算法的童鞋学习!

1. 问题背景

逆序对:当 i < j i<j i<j时, A [ i ] > A [ j ] A[i]>A[j] A[i]>A[j]的二元组 ( A [ i ] , A [ j ] ) (A[i], A[j]) (A[i],A[j]),例如下图中的 ( A [ 1 ] , A [ 4 ] ) (A[1], A[4]) (A[1],A[4]) ( A [ 2 ] , A [ 4 ] ) (A[2], A[4]) (A[2],A[4])等。

在这里插入图片描述

​ 那么,问题就变成了如何求解数组中逆序对的个数?

2. 问题定义

逆序对计数问题(Counting Inversions)

输入:

  • 长度为 n n n的数组 A [ 1.. n ] A[1..n] A[1..n]

输出:

  • 数组 A [ 1.. n ] A[1..n] A[1..n]逆序对的总数,即 ∑ 1 ≤ i < j ≤ n X i , j \sum_{1 \leq i < j \leq n}X_{i, j} 1i<jnXi,j,其中,
    X i , j = { 1 , A [ i ] > A [ j ] 0 , A [ i ] ≤ A [ j ] X_{i, j}=\left\{ \begin{array}{rcl} 1, & & {A[i] > A[j]}\\ 0, & & {A[i] \leq A[j]}\\ \end{array} \right. Xi,j={ 1,0,A[i]>A[j]A[i]A[j]

3. 分而治之

在这里插入图片描述

  • 分解原问题:把数组 A A A二分为两个子数组 A [ 1.. n 2 ] A[1..\frac{n}{2}] A[1..2n] A [ n 2 + 1.. n ] A[\frac{n}{2}+1..n] A[2n
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值