《算法设计与分析基础(第3版)》第一,二章部分习题答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
作业一
学号:_____ 姓名:_____
说明:
1、正文用宋体小四号,1.5倍行距。
2、报告中的图片、表格中的文字均用宋体五号,单倍行距。
3、图片、表格均需要有图片编号和标题,均用宋体五号加粗。
4、参考文献用宋体、五号、单倍行距,请参照参考文献格式国家标准(GB/T 7714-
2005)。
5、公式请使用公式编辑器。
P14
4.用伪代码写一个算法来求方程ax2+bx+c=0的实根,a,b,c 是任意实系数。(可以假设sqrt(x)是求平方根的函数。)
算法:Equate(a,b,c)
//实现二元一次方程求解实数根
//输入:任意系数a,b,c
//输出:方程的实数根x1,x2或无解
If a≠0
p←b2−4ac
If p>0
x1←−b+sqrt(p)
2a
x2←−b−sqrt(p)
2a
return x1,x2
else if p=0
return −b
2a
else
return “no real roots”
else
if b≠0
return −c
b
else
if c≠0
return “no real numbers”
else
return “no real roots”
5.写出将十进制正整数转换为二进制整数的标准算法。
a.用文字描述。
b.用伪代码描述。
a.解:
输入:一个正整数n
输出:正整数n相应的二进制数
第一步:用n 除以2,余数赋给K[i](i=0,1,2...),商赋给n
第二步:如果n=0 ,则到第三步,否则重复第一步
第三步:将K[i]按照i从高到低的顺序输出
b.解:
算法:DecToBin(n)
//实现正整数十进制转二进制
//输入:一个正整数n
//输出:正整数n对应的二进制数组K[0..i]
i ←1
while n≠0 do
K[i]←n%2
n←(int)n/2
i ++
while i≠0do
print K[i]
i - -
p46
2.请用O,Ω 和θ的非正式定义来判断下列断言是真还是假。
a. n(n+1)/2∈O(n3)
b. n(n+1)/2∈O(n2)
c. n(n+1)/2∈θ(n3)
d. n(n+1)/2∈Ω(n)
解:
断言为真:a,b,d
断言为假:c
P53
5.考虑下面的算法。
算法:Secret(A[0..n−1])
//输入:包含n个实数的数组A[0..n−1]
minval←A[0];maxval←A[0]
for i←1 to n−1 do
if A[i] minval←A[i] if A[i]>maxval maxval←A[i] return maxval−minval a. 该算法求的是什么? b. 它的基本操作是什么? c. 该基本操作执行了多少次? d. 该算法的效率类型是什么? e. 对该算法进行改进,或者设计一个更好的算法,然后指出它的效率类型。如 果做不到这一点,请试着证明这是不可能做到的。 a.答:该算法求的是一组数中最大值与最小值的差值。 b.答:A[i] A[i] c.答:n−1次 d.答:O(n) e.由于此为一维数组若要得到其最大或最小值,者至少需比较n−1次,因 此效率类型为O(n),无法改进。 6.考虑下面的算法。 算法:Enigma(A[0..n−1,0..n−1]) //输入:一个实数矩阵A[0..n−1,0..n−1] for i←0 to n−2 do for j←i+1 to n−1 do if A[i,j]≠A[j,i] return false return true a. 该算法求的是什么? b. 它的基本操作是什么? c. 该基本操作执行了多少次? d. 该算法的效率类型是什么? e. 对该算法进行改进,或者设计一个更好的算法,然后指出它的效率类型。如 果做不到这一点,请试着证明这是不可能做到的。 a.答:该算法求的是二维数组是否对称。 b.答:A[i,j]≠A[j,i] c.答:n2/2次 d.答:O(n2) e.答:若判断一个矩阵是否为对称矩阵,则至少需比较矩阵一半数量次数, 所以无法改进。 P59-60 1.解下列递推关系。 a. x(n)=x(n−1)+5 ,其中n>1 ,x(1)=0 b. x(n)=3x(n−1) ,其中n>1 ,x(1)=4 c. x(n)=x(n−1)+n ,其中n>0 ,x(0)=0 )+n ,其中n>1 ,x(1)=1(对于n=2k的情况求解) d. x(n)=x(n 2 e. x(n)=x(n )+1 ,其中n>1 ,x(1)=1(对于n=3k的情况求解) 3 a.解:x(n)=x(n−1)+5 ,for n>1 ,x(1)=0 x(n)=[x(n−2)+5]+5=x(n−2)+5×2 x(n)=[x(n−3)+5]+5×2=x(n−3)+5×3 x(n)=[x(n−4)+5]+5×3=x(n−4)+5×4 … x(n)=x(n−i)+5×i … x(n)=x(1)+5×(n−1)=5×(n−1) b.解:x(n)=3x(n−1) ,for n>1 ,x(1)=4 x(n)=3×3x(n−2)=32x(n−2) x(n)=3×32x(n−3)=33x(n−3) x(n)=3×33x(n−4)=34x(n−4) … x(n)=3i x(n−i) … x(n)=3n−1x(1)=4×3n−1 c.解:x(n)=x(n−1)+n ,for n>0 ,x(0)=0 x(n)=[x(n−2)+n−1]+n=x(n−2)+n−1+n