课后练习 第3章 算法分析

课后练习 第3章 算法分析

巩固

R-3.1 画出函数 8 n 8n 8n 4 n l o g n 4nlogn 4nlogn 2 n 2 2n^{2} 2n2 n 3 n^{3} n3 2 n 2^{n} 2n的图形,其中 x x x轴和 y y y轴均为对数刻度。也就是说,若函数 f ( n ) f(n) f(n)的值为 y y y,则 x x x坐标为 l o g ( n ) log(n) log(n),y坐标为 l o g ( y ) log(y) log(y),其中, ( x , y ) (x, y) (x,y)为一个点。

什么是对数刻度?

import numpy as np
import matplotlib.pyplot as plt


fig = plt.figure()
x_data = np.arange(2, 1000, 1)
line1 = plt.plot(np.log(x_data), np.log(8 * x_data), label='8n', color='red', linewidth=2.0, linestyle='-', )
line2 = plt.plot(np.log(x_data), np.log(4 * x_data * np.log(x_data)), label='4nlog(n)', color='green', linewidth=2.0, linestyle='--')
line3 = plt.plot(np.log(x_data), np.log(2 * x_data * x_data), label='2n^2', color='blue', linewidth=2.0, linestyle=':')
line4 = plt.plot(np.log(x_data), np.log(x_data * x_data * x_data), label='n^3', color='yellow', linewidth=2.0, linestyle='-.')
line5 = plt.plot(np.log(x_data), np.log(2 ** x_data), label='2^n', color='pink', linewidth=2.0, linestyle='-')
plt.xlabel('log(n)')
plt.ylabel('log(y)')
plt.legend()
plt.show()

在这里插入图片描述


R-3.2 算法A和B的执行的操作个数分别为 8 n l o g ( n ) 8nlog(n) 8nlog(n) 2 n 2 2n^{2} 2n2。确定 n 0 n_{0} n0,满足:当 n > = n 0 n >= n_{0} n>=n0时,A比B更优。

设置运行时间相等,使用代数简化方程式,然后以2的乘方数归纳在正确的答案上

将两个等式设为相等并简化,我们看到交叉发生在n = 4log n处。 现在,我们可以确认交叉发生在n = 2 4 2^{4} 24 = 16处。


R-3.3 算法A和B执行的操作个数分别为 40 n 2 40n^{2} 40n2 2 n 3 2n^{3} 2n3。确定 n 0 n_{0} n0,满足:当 n > = n 0 n>=n_{0} n>=n0时,A比B更优。

设置彼此相等的双方,以确定这一点

将两边设置为相等并简化可确认在 n = 20 n = 20 n=20处发生交叉。即,对于n≥20,则 40 n 2 ≤ 2 n 3 40n^{2}≤2n^{3} 40n22n3
40 n 2 = 2 n 3 (1) 40n^{2} = 2n^{3}\tag1 40n2=2n3(1)
40 n 2 − 2 n 3 = 0 (2) 40n^{2} - 2n^{3} = 0 \tag2 40n22n3=0(2)
2 n 2 ( 20 − n ) = 0 (3) 2n^{2}(20-n)=0 \tag3 2n2(20n)=0(3)
n = 20 (4) n=20\tag4 n=20(4)


R-3.4 请给出一个函数示例,该函数在双对数坐标轴和标准坐标轴中的图形一样。

任何增长函数的对数-对数刻度将比标准刻度具有“更平坦”的曲线。

常数函数。


R-3.5 试解释:在双对数坐标轴中,斜率为c的函数 n c n^{c} nc,为何其图形为一条直线?

下面给出公式解释

y = n c (1) y=n^{c}\tag1 y=nc(1)
l o g ( y ) = l o g ( n c ) (2) log(y) = log(n^{c})\tag2 log(y)=log(nc)(2)
l o g ( y ) = c l o g ( n ) (3) log(y)=clog(n)\tag3 log(y)=clog(n)(3)


R-3.6 对于任意的正整数 n n n 0 0 0~ 2 n 2n 2n范围内,所有偶数的和是多少?

即求

0 + 2 + 4 + 6 + . . . + 2 ( n − 1 ) + 2 n (1) 0+2+4+6+...+2(n-1) + 2n\tag1 0+2+4+6+...+2(n1)+2n(1)
= 2 ( 0 + 1 + 2 + 3 + . . . ( n − 1 ) + n ) (2) =2(0+1+2+3+...(n-1)+n)\tag2 =2(0+1+2+3+...(n1)+n)(2)
= 2 ∑ i = 0 n i (2) =2\sum_{i=0}^{n}i\tag2 =2i=0ni(2)
= 2 ∗ n ( n + 1 ) 2 =2*\frac{n(n+1)}{2} =22n(n+1)
= n ( n + 1 ) =n(n+1) =n(n+1)


R-3.7 证明下面两个语句等价:
1)算法A的运行时间总为 O ( f ( n ) ) O(f(n)) O(f(n))
2)在最坏情况下,算法A的运行时间为 O ( f ( n ) ) O(f(n)) O(f(n))

使用以下事实:如果 a < b a < b a<b b < c b < c b<c,则 a < c a < c a<c

设算法A的实际运行时间为b
1)中的运行时间设置为a
2)中的运行时间设置为c
a < b a < b a<b
b < c b < c b<c
所以 a < c a < c a<c


R-3.8 根据渐近增长速率对下面的函数进行排序。

4 n l o g n + 2 n 4nlogn+2n 4nlogn+2n 2 10 2^{10} 210 2 l o g n 2^{logn} 2logn
3 n + 100 l o g n 3n+100logn 3n+100logn 4 n 4n 4n 2 n 2n 2n
n 2 + 10 n n^{2}+10n n2+10n n 3 n^{3} n3 n l o g n nlogn nlogn
函数时间复杂度
4 n l o g n + 2 n 4nlogn+2n 4nlogn+2n O ( n l o g n ) O(nlogn) O(nlogn)
2 10 2^{10} 210 O ( C ) O(C) O(C)
2 l o g n 2^{logn} 2logn O ( n ) O(n) O(n)
3 n + 100 l o g n 3n+100logn 3n+100logn O ( n ) O(n) O(n)
4 n 4n 4n O ( n ) O(n) O(n)
2 n 2n 2n O ( n ) O(n) O(n)
n 2 + 10 n n^{2}+10n n2+10n O ( n 2 ) O(n^{2}) O(n2)
n 3 n^{3} n3 O ( n 3 ) O(n^{3}) O(n3)
n l o g n nlogn nlogn O ( n l o g n ) O(nlogn) O(nlogn)

排序略


R-3.9

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值