0
点赞
收藏
分享

微信扫一扫

西农 算法设计与分析第四版王晓东(第一次作业)

灯火南山 2022-02-25 阅读 55
算法

西农 算法设计与分析第四版王晓东(第一次作业)


1-3

写一个通用方法用于判定给定数组是否已排好序。
解: 分析问题:
1.满足从小到大或从大到小 2.满足各种合法的数据类型 3.满足负数,零和正数

//C++实现
template <class T>//使用模板
bool IsSorted(T* a, int n) {
	int Lower = 0;
	int Higher = 0;
	int i = 0;
	for (i = 0; i < n; i++) {
    	if (a[i] > a[i+1]) Lower ++;
    	if (a[i] < a[i+1]) Higher ++;
     	if (a[i] == a[i+1]) {Lower++;Higher++;}
    if ((toLow == i) || (toHigh == i )) return true;
    return false;
}

1-4

求下列函数的渐进表达式。
( 1 ) 3 n 2 + 10 n (1)3n^2+10n 13n2+10n ( 2 ) n 2 / 10 + 2 n (2) n^2/10+2^n 2n2/10+2n ( 3 ) 21 + 1 / n (3)21+1/n 321+1/n ( 4 ) log ⁡ n 3 (4) \log n^3 4logn3 ( 5 ) 10 log ⁡ 3 n (5) 10\log 3^n 510log3n
解: 分析问题:
算法复杂性的关系: O ( 1 ) < O ( log ⁡ n ) < O ( n log ⁡ n ) < O ( n ) < O ( n 2 ) < O ( n 3 ) < ⋯ < O ( n m ) < O ( 2 n ) < O ( n ! ) < O ( n n ) O(1)<O(\log n)<O(n\log n)<O(n)<O(n^2)<O(n^3)<\cdots<O(n^m)<O(2^n)<O(n!)<O(n^n) O(1)<O(logn)<O(nlogn)<O(n)<O(n2)<O(n3)<<O(nm)<O(2n)<O(n!)<O(nn)

( 1 ) 3 n 2 + 10 n = O ( n 2 ) (1) 3n^2+10n=O(n^2) 13n2+10n=O(n2) ( 2 ) n 2 / 10 + 2 n = O ( 2 n ) (2) n^2/10+2^n=O(2^n) 2n2/10+2n=O(2n) ( 3 ) 21 + 1 / n = O ( 1 ) (3)21+1/n=O(1) 321+1/n=O(1)
( 4 ) log ⁡ n 3 = 3 log ⁡ n = O ( log ⁡ n ) (4)\log n^3=3\log n=O(\log n) 4logn3=3logn=O(logn) ( 5 ) 10 log ⁡ 3 n = ( 10 log ⁡ 3 ) n = O ( n ) (5)10\log 3^n=(10\log 3)n=O(n) 510log3n=(10log3)n=O(n)


1-5

说明 O ( 1 ) O(1) O(1) O ( 2 ) O(2) O(2)的区别。
解: O ( 1 ) = O ( 2 ) O(1)=O(2) O(1)=O(2),用 O ( 1 ) O(1) O(1) O ( 2 ) O(2) O(2)表示同一个函数时,差别仅在于常数因子。


1-6

按照渐进阶从低到高的顺序排列以下表达式: 4 n 2 , log ⁡ n , 3 n , 20 n , 2 , n 2 / 3 4n^2,\log n,3^n,20n,2,n^{2/3} 4n2,logn,3n,20n,2,n2/3。又 n ! n! n!应该排在哪一位?
解: 排列顺序为: 2 , log ⁡ n , n 2 / 3 , 4 n 2 , 3 n , n ! 2,\log n,n^{2/3},4n^2,3^n,n! 2,logn,n2/3,4n2,3n,n!


1-7

(1)假设某算法在输入规模为 n n n时的计算时间为 T ( n ) = 3 × 2 n T(n)=3\times2^n T(n)=3×2n。在某台计算机上实现并完成该算法的时间为 t t t秒。现有另一台计算机,其运行速度为第一台的 64 64 64倍,那么在这台新机器上用同一算法在 t t t秒内能解输入规模多大的问题?
(2)若上述算法的计算时间改进为 T ( n ) = n 2 T(n)=n^2 T(n)=n2,其余条件不变,则在新机器上用 t t t秒时间能解输入规模多大的问题?
(3)若上述算法的计算时间进一步改进为 T ( n ) = 8 T(n)=8 T(n)=8,其余条件不变,那么在新机器上用 t t t秒时间能解输入规模多大的问题?
解: ( 1 ) (1) 1由题知 3 × 2 n = ( 3 × 2 n 1 ) / 64 3\times2^n=(3\times2^{n_1})/64 3×2n=(3×2n1)/64,解得 n 1 = n + 6 n_1=n+6 n1=n+6,则能解输入规模为 n + 6 n+6 n+6的问题。
( 2 ) (2) 2由题知 n 2 = n 2 2 / 64 n^2=n_2^2/64 n2=n22/64,解得 n 2 = 8 n n_2=8n n2=8n,则能解输入规模为 8 n 8n 8n的问题。
( 3 ) (3) 3在输入规模为 n n n时的计算时间为 T ( n ) = 8 T(n)=8 T(n)=8,则能解任意输入规模的问题。


1-8

硬件厂商XYZ公司宣称他们最新研制的微处理器的运行速度为其竞争对手ABC公司同类产品的的100倍。对于计算复杂性分别为 n , n 2 , n 3 n,n^2,n^3 n,n2,n3 n ! n! n!的各算法,若用ABC公司的计算机在1小时内能解决输入规模为 n n n的问题,那么用XYZ公司的计算机在1小时内分别能解输入规模为多大的的问题?
解: n 1 = 100 n ; n 2 2 = 100 n 2 , n_1=100n;{n_2}^2=100n^2, n1=100n;n22=100n2, n 2 = 10 n ; n 3 3 = 100 n 3 , n_2=10n;{n_3}^3=100n^3, n2=10n;n33=100n3, n 3 = 100 3 n ; n_3=\sqrt[3]{100}n; n3=3100 n;


1-9

对于下列各组函数 f ( n ) f(n) f(n) g ( n ) g(n) g(n),确定 f ( n ) = O ( g ( n ) ) f(n)=O(g(n)) f(n)=O(g(n)) f ( n ) = Ω ( g ( n ) ) f(n)=\Omega(g(n)) f(n)=Ω(g(n)) f ( n ) = θ ( g ( n ) ) f(n)=\theta(g(n)) f(n)=θ(g(n)),并简述理由。
( 1 ) f ( n ) = log ⁡ n 2 , g ( n ) = log ⁡ n + 5 (1)f(n)=\log n^2,g(n)=\log n+5 1f(n)=logn2,g(n)=logn+5
( 2 ) f ( n ) = log ⁡ n 2 , g ( n ) = n (2)f(n)=\log n^2,g(n)=\sqrt{n} 2f(n)=logn2,g(n)=n
( 3 ) f ( n ) = n , g ( n ) = log ⁡ 2 n (3)f(n)=n,{g(n)=\log}^2 n 3f(n)=n,g(n)=log2n
( 4 ) f ( n ) = n log ⁡ n + n , g ( n ) = log ⁡ n (4)f(n)=n\log n+n,g(n)=\log n 4f(n)=nlogn+n,g(n)=logn
( 5 ) f ( n ) = 10 , g ( n ) = log ⁡ 10 (5)f(n)=10,g(n)=\log 10 5f(n)=10,g(n)=log10
( 6 ) f ( n ) = log ⁡ 2 n , g ( n ) = log ⁡ n (6)f(n)={\log}^2 n,g(n)=\log n 6f(n)=log2n,g(n)=logn
( 7 ) f ( n ) = 2 n , g ( n ) = 100 n 2 (7)f(n)=2^n,g(n)=100n^2 7f(n)=2n,g(n)=100n2
( 8 ) f ( n ) = 2 n , g ( n ) = 3 n (8)f(n)=2^n,g(n)=3^n 8f(n)=2n,g(n)=3n
解: 分析问题:
算法复杂性的关系: O ( 1 ) < O ( log ⁡ n ) < O ( n log ⁡ n ) < O ( n ) < O ( n 2 ) < O ( n 3 ) < ⋯ < O ( n m ) < O ( 2 n ) < O ( n ! ) < O ( n n ) O(1)<O(\log n)<O(n\log n)<O(n)<O(n^2)<O(n^3)<\cdots<O(n^m)<O(2^n)<O(n!)<O(n^n) O(1)<O(logn)<O(nlogn)<O(n)<O(n2)<O(n3)<<O(nm)<O(2n)<O(n!)<O(nn)
( 1 ) log ⁡ n 2 = 2 log ⁡ n (1)\log n^2=2\log n 1logn2=2logn,则 f ( n ) f(n) f(n) g ( n ) g(n) g(n)同阶,即 log ⁡ n 2 = θ ( log ⁡ n + 5 ) \log n^2=\theta(\log n+5) logn2=θ(logn+5)
( 2 ) log ⁡ n 2 = 2 log ⁡ n ≤ n (2)\log n^2=2\log n\le\sqrt{n} 2logn2=2lognn ,则 g ( n ) g(n) g(n) f ( n ) f(n) f(n)的上界,即 log ⁡ n 2 = O ( n ) \log n^2=O(\sqrt{n}) logn2=O(n )
( 3 ) (3) 3 n = 2 m n=2^m n=2m,则 f ( n ) = 2 m , g ( n ) = m 2 f(n)=2^m,g(n)=m^2 f(n)=2m,g(n)=m2,则 g ( n ) g(n) g(n) f ( n ) f(n) f(n)的下界,即 n = Ω ( log ⁡ 2 n ) n=\Omega({\log}^2 n) n=Ω(log2n)
( 4 ) n log ⁡ n + n ≥ log ⁡ n (4)n\log n+n\ge\log n 4nlogn+nlogn,则 g ( n ) g(n) g(n) f ( n ) f(n) f(n)的下界,即 n log ⁡ n + n = Ω ( log ⁡ n ) n\log n+n=\Omega(\log n) nlogn+n=Ω(logn)
( 5 ) 10 (5)10 510 log ⁡ 10 \log 10 log10都是常数,则 f ( n ) f(n) f(n) g ( n ) g(n) g(n)同阶,即 10 = θ ( log ⁡ 10 ) 10=\theta(\log 10) 10=θ(log10)
( 6 ) log ⁡ 2 n = log ⁡ n × log ⁡ n ≥ log ⁡ n (6){\log}^2 n=\log n\times\log n\ge\log n 6log2n=logn×lognlogn,则 g ( n ) g(n) g(n) f ( n ) f(n) f(n)的下界,即 log ⁡ 2 n = Ω ( log ⁡ n ) {\log}^2 n=\Omega(\log n) log2n=Ω(logn)
( 7 ) 2 n ≥ 100 n 2 (7)2^n\ge100n^2 72n100n2,则 g ( n ) g(n) g(n) f ( n ) f(n) f(n)的下界,即 2 n = Ω ( 100 n 2 ) 2^n=\Omega(100n^2) 2n=Ω(100n2)
( 8 ) 2 n ≤ 3 n (8)2^n\le3^n 82n3n,则 g ( n ) g(n) g(n) f ( n ) f(n) f(n)的上界,即 2 n = O ( 3 n ) 2^n=O(3^n) 2n=O(3n)


举报

相关推荐

0 条评论