- 1、本文档共76页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[计算机软件及应用]2-Chapte1 线性表
C.–C. Yao Examples of Asymptotic Notation 3n + 2 = O(n) 3n + 2≤4n for all n≥ 3 100n + 6 = O(n) 100n + 6≤101n for all n≥ 10 10n2+ 4n + 2 = O(n2) 10n2+ 4n + 2≤11n2 for all n≥ 5 时间复杂度的渐进表示法 例 求两个n阶方阵的乘积C = A?B void MatrixMultiply ( int A[n][n], int B[n][n], int C[n][n] ) { for ( int i = 0; i n; i++ ) …2n+2 for ( int j = 0; j n; j++ ) { … n(2n+2) C[i][j] = 0; … n2 for ( int k = 0; k n; k++ ) … n2(2n+2) C[i][j] = C[i][j] + A[i][k] * B[k][j]; … n3 } } 3n3 + 5n2 + 4n +2 时间复杂度的渐进表示法 算法中所有语句的频度之和是矩阵阶数n的函数 T(n) = 3n3 + 5n2 + 4n +2 一般地,称 n 是问题的规模。则时间复杂度 T(n) 是问题规模 n 的函数。 当n趋于无穷大时,把时间复杂度的数量级(阶)称为算法的渐进时间复杂度 T(n) = O(n3) ─ 大O表示法 加法规则 针对并列程序段 T(n, m) = T1 (n) + T2 (m) = O(max (f (n), g (m))) 各种函数的增长趋势 c log2n n nlog2n n2 n3 2n 3n n! Function Values log n n n log n n2 n3 2n 0 1 0 1 1 2 1 2 2 4 8 4 2 4 8 16 64 16 3 8 24 64 512 256 4 16 64 256 4096 65536 5 32 160 1024 32768 4294967296 常见函数增长率 T(n) = T1(n)+T2(n)+T3(n) = O( max( 1, n, n2 ) ) = O(n2) 变量计数 for ( int i = 0; i n; i++ ) for ( int j = 0; j n; j++ ) y ++; T1 (n) = O(1) T2(n) = O(n) T3(n) = O(n2) x = 0; y = 0; for ( int k = 0; k n; k ++ ) x ++; 乘法规则 针对嵌套程序段 T (n, m) = T1 (n) * T2 (m) = O(f (n)*g (m)) 渐进的空间复杂度 S (n) = O(f (n)) 两个并列循环的例子 void exam ( float x[ ][ ], int m, int n ) { float sum [ ]; for ( int i = 0; i m; i++ ) { //x中各行 sum[i] = 0.0; //数据累加 for ( int j = 0; j n; j++ ) sum[i] += x[i][j]; } for ( i = 0; i m; i++ ) //打印各行数据和 cout i “ : ” sum [i] endl; } 渐进时间复杂度为 O(max (m*n, m)) 起泡排序 void bubbleSort ( int a[ ], int n ) { //对表 a[ ] 逐趟比较, n 是表当前长度 for (int i = 1; i = n-1; i++) { //n-1趟 for (int j = n-1; j = i
文档评论(0)