算法导论 2-4 逆序对

(逆序对)假设A[1..n]是一个有n个不同数的数组。若i<j且A[i]>A[j],则对偶(i, j)称为A的一个逆序对(inversion)。

a. 列出数组<2, 3, 8, 6, 1>的5个逆序对。

b. 由集合{1, 2, ..., n}中的元素构成的数组具有最多的逆序对?它有多少逆序对?

c. 插入排序的运行时间与输入数组中逆序对的数量之间是什么关系?证明你的回答。

d. 给出一个确定在n个元素的任何排列中逆序对数量的算法,最坏情况需要θ(nlgn)时间。(提示:修改归并排序)

解答:

a 解答:

5个逆序对分别为<2, 1>, <3, 1>, <8, 6>, <8, 1>, <6, 1>

b 解答:

如果集合{1, 2, ..., n}有最多的逆序对,则它必然是已按逆序排序的数组,因为对于每一个组成逆序对第一个值的下标i,都存在n-i个逆序对,而这是它所能达到的逆序对个数的最大值。总逆序对数量为\sum_{k=1}^{n-1}k,等于 \frac{n(n-1))}{2} 。

c. 解答:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值