第二章 2.2节

2.2-1

用Θ记号表示函数n^3/1000 - 100n^2 - 100n +3

解答:

这个就很简单了,这里我们真正感兴趣的运行时间是增长率,也就是直接控制函数图像斜率的因素。

这里就是Θ(n^3)


2.2-2

考虑排序存储在数组A中的n个数:首先找出A中的最小元素并将A[1]中的元素进行交换。

接着,找出A中的次最小元素并将其与A[2]中的元素进行交换。

对A中前n-1个元素按该方式继续。该算法称为选择算法。

①写出其伪代码

②该算法维持的循环不变式是什么?

③为什么它只要对前n-1个元素,而不是对所有n个元素运行?

④用Θ记号给出选择排序的最好情况与最坏情况运行时间。

解答:

①②

伪代码参考:http://blog.csdn.net/lxiaoxiaot/article/details/6684727

for i from to n - 1:
	minIndex = i
	for j from i + 1 to n:
		if A[i] < A[minIndex] :
			minIndex = i
		swap A[i] and A[minIndex]


③因为是在比较大小后进行交换的,所以最后一个元素没有必要和自己进行比较

④我这个写法,个人感觉最好和最坏的情况都是Θ(n^2)。这里第二个循环执行的次数是不变的,为n(n+1)/2 - 1 次,这里与原始list是如何放置元素好像没有关系。

希望有算法比较好的同学给我指正下错误,或者指正一下伪代码。


2.2-3

再次考虑线性查找问题。假定要查找的元素等可能地为数组中的任意元素,平均需要检查输入序列的多少元素?最坏情况又如何?用Θ记号给出线性查找的平均情况和最坏运行时间。证明你的答案。

解答:

平均需要检查n/2个元素

最坏的情况,需要检查n个元素

两种情况都是Θ(n)


2.2-4

我们可以如何修改几乎任意算法来使之具有良好的最好情况运行时间?

解答:

将数据一开始就排列成我们想要顺序(升序或降序)就可以了。


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值