算法导论(第三章)思考题2-4 假设A[1..n]是一个有n个不同数的数组.

题干如下:

假设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}中的元素构成的顺me数组具有最多的逆序对?它有多少逆序对?

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

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

(提示:修改归并排序)

解:

a.(2,1),(3,1),(8,1),(6,1),(8,6)

b.构成{n,n-1,n-2,...,1}具有最多的逆序对.它有(n-1)+(n-2)+...+1个 即n(n-1)/2个逆序对

c.插入排序的运行时间与输入数组中逆序对的数量成正比关系

插入排序的本质是 对于每一个排列呈逆序的对偶,都要进行一次交换 所以交换次数就是逆序对个数

d.算法为:

将逆序对个数记为x

在第1层 将n个数排列呈n/2组 每组2个数 算出呈逆序对的组别数算出第一层的x 并将呈逆序对的组排列成正序

在第2层 将n/2组正序对合并 每组合并方式为选取组i,i+1中放在最上的较小的数,且每当从组i+1中获取到的较小的数要记x=x+1

...

在第lg(n)层 仅剩最后两组数需要合并 选取两组中放在最上的较小的数 ,如果从第二组中获取到较小的数要记x=x+1

最终 排序完成后 共比较了n/2+n/4+...+1 即(n/2+1)*lgn次 最坏情况的时间复杂度为θ(nlgn)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值