标签:对象 一维数组 span 改变 数组 逆序对数 情况 之间 swap
这是对的,值得思考,毕竟应用不是太少(所以要说服自己,用的时候更有底气)。
设一序列\(a_1,a_2,\cdots,a_n\),其中有\(a_i(1\leq i \leq n)\)。
假设要通过交换\(a_i\)与某个数的位置来减少逆序对的数量。
交换的对象分这么几类:
1.\(a_i\)后面比\(a_i\)小的数
2.\(a_i\)后面比\(a_i\)大的数
3.\(a_i\)前面比\(a_i\)小的数
4.\(a_i\)前面比\(a_i\)大的数
假设交换的对象是\(a_j\)
前置说明(i-j之间不包括i、j)
第一种情况:
显然减少一个逆序对数
由于i,j被swap过,
\(a_i\)与且仅与\(i-j\)之间元素的相对位置发生改变,\(a_j\)同样。
那么逆序对数还要加上i-j之间比k大的数和i-j之间比j小的数,还要减上i-j之间比k小的数和i-j之间比j大的数。
到头来总逆序对数还是只减了1。
第二种情况:
显然增加一个逆序对数
由于i、j被swap过,同上,到头来逆序对数还是只加了1.
第三种情况:
同上,增加一个逆序对数
第四种情况:
同上,减少一个逆序对数。
一维数组中的任意二元素交换最多只能将整个序列的逆序对数减少1
标签:对象 一维数组 span 改变 数组 逆序对数 情况 之间 swap
原文地址:https://www.cnblogs.com/tztqwq/p/11157749.html