直译就是将一个问题分解逐步解答。
分治算法基本步骤:
一、把输入划分成更小的子问题。
二、递归的治理子问题。
三、把子问题的解决方案组合到一起,形成原始问题的解决方案。
比如High Level Approach - 分治算法
如果我们用分治算法来算这个问题的话,第一个“划分”步骤就是把数组A划分成更小的子问题,我们把A平均的划分成两个部分左边和右边,这样数组规模就变小了,这样划分下逆序对(i,j)就有三种情况:
- 左逆序对: 逆序对 i 和 j 都位于数组的左半部分()
- 右逆序对: 逆序对 i 和 j 位于数组的右半部分()
- 分离逆序列: 逆序对 i 位于左半部分 j 位于右半部分()
算法的“组合”步骤:
- 第1个递归调用作用于输入数组的左半部分,它采用递归的方式对左逆序对进行计数(没有其它任何操作)。
- 第2个递归调用对所有右逆序对进行计数。
- 剩余任务是对那些没有被这两个递归调用计数的逆序对(分离逆序对)进行计数