《算法导论》 练习 2.1

《算法导论》 练习 2.1

一个好久没动脑的感觉人快坏掉了的超菜的文科生的《算法导论(第3版)》学习记录。

2.1 - 1

问:
说明 INSERTION-SORT 在数组 A = <31, 41, 59, 26, 41, 58> 上的执行过程。

答:
插入排序的过程,根据书中提供的伪代码可以得到,略。

2.1 - 2

问:
重写 INSERTION-SORT 过程,使之按非升序排序。

答:
伪代码如下

for j = 2 to A.length
	key = A[j]
	i = j - 1
	while i > 0 and A[i] < key
		A[i+1] = A[i]
		i = i + 1
	A[i+1] = key

2.1 - 3

问:
考虑以下查找问题,
输入,n 个数的一个序列 A = <a1, a2, … , an> 和一个值 v;
输出,下标 i 使得 v = A[i] 或者当 v 不在 A 中出现时,v 为特殊值 NIL;
写出线性查找的伪代码,使用一个循环不变式来证明算法是正确的。

答:
伪代码如下

for i = 1 to A.length
	if v == A[i]
		return i
return NIL

循环不等式,在 1~3 行 for 循环的每次迭代开始时,子数组 A[1, …, i-1] 由原数组在 [1, i-1] 的元素组成,且其中不存在 v = A[j];
初始化,v 同 [] 中的元素不一样;
保持,若到下一次迭代,说明 v != A[i],又 v != A[1, …, i-1],说明 i 时的循环不等式成立;
终止,A[1, …, A.length] 说明不存在 v = A[j]。

2.1 - 4

问:
考虑把两个 n 位二进制整数加起来的问题,分别存储在 n 元数组 A 和 B 中,求其和 C。

答:
假定 A、B 是倒着存储的二进制整数数组,则伪代码如下:

for i = 1 to n
	C[i] = A[i] + B[i]
	C[i+1] = C[i] // 2
	C[i] = C[i] % 2
C[n+1] = C[n] // 2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值