《算法设计与分析基础(第3版)》第一,二章部分习题答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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]maxval和maxval←

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

相关文档
最新文档