CHCH-数据结构入门.pptVIP

  • 2
  • 0
  • 约 39页
  • 2015-12-18 发布于湖北
  • 举报
CHCH-数据结构入门.ppt

数据结构 动态数组建立和释放 Point* p = new Point[100]; //建立下列有 100个点的数组 delete [ ]p; 算法分析 需要考察算法的性质,比较不同算法的优劣,理解一个算法的适应范围。算法分析:度量算法性质的过程 最常用的算法度量特性是: ①空间代价(空间复杂性):被解决问题的规模(以某种单位计)为n时,某求解算法所需存储空间按某种单位为S( n),称该算法的空间代价(空间复杂性)为S( n) ②时间代价(时间复杂性):当问题规模(以某种单位)为n时,算法所耗时间以某种单位计算为T( n),则称该算法的时间代价(时间复杂性)为T( n) 三个重要概念: * 问题规模 * 空间单位 * 时间单位 需要根据实际问题的 情况确定。 定义:设对一切(问题规模) n ≥0的整数有一个非负函数T(n),若存在正常数c和整数n0,且对任意n≥ n0,有T(n) ≤c ● f(n),那么就说T(n)是f(n)的大O表示,记为T(n)=O(f(n))。 这时也说该算法的时间(或空间)代价的增长率为f(n)。 也就是说,当n充分大时,该算法所需时间(空间)不大于f(n) 的某常数倍 9、大O记法 举例2:T(n)=8n+128,证明T(n)=O(n2) 显然对一切n≥0有一非负函数T(n), 假定C=1,那么8n+128≤n2,(n+8)(n-16) ≥0 由于(n+8)0,因此(n-16) ≥0,由此推出n0=16, 也就是说当n ≥16时, 8n+128≤n2 ,T(n)=O(n2)-上界 举例1:T(n)=3n3,证明T(n)=O(n3) 显然对一切n≥0有一非负函数T(n), 假定C=6,那么3n3≤6n3, 由此推出n0=0, 也就是说当n ≥0时, 3n3≤6n3,T(n)=O(n3)-上确界 9、大O记法 举例3 : 求两个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++ ) for ( int j = 0; j n; j++ ) { C[i][j] = 0; for ( int k = 0; k n; k++ ) C[i][j] = C[i][j] + A[i][k] * B[k][j]; } } 2n3 + 3n2 + 2n +1 T(n)=O(n3) … n+1 … n(n+1) … n2 … n2(n+1) … n3 9、大O记法 O(1) O(logn) O(n) O(n2) O(2n) 常数/对数/线性/平方/指数 最坏情况时间复杂性 ? 平均时间复杂性 ? 最好情况时间复杂性(不太有用) 对空间复杂性也可以有类似考虑 考虑 ??? 9、大O记法 算法时间复杂性的计算规则 1. 加法规则(顺序复合) 算法分为两部分时,复杂性是两部分的复杂性之和 T(n) = T1(n) + T2(n) = O(f1(n)) + O(f2(n)) = O(max(f1(n), f2(n))) 2. 乘法规则(循环) 循环T1(n) 次,每次T2(n) 时间,则 T(n) = T1(n)×T2(n) = O(f1(n)) ×O(f2(n))= O(f1(n)×f2(n)) 9、大O记法 例:矩阵乘法 Cn×n = An×n × Bn×n for(i=0; in; i++) for(j=0; jn; j++) { c[i][j]=0; for(k=0; kn; k++) c[i][j] = c[i][j]+a[i][k]*b[k][j]; } T(n) = O(f1(n)×f2(n)×(O(1)+O(n))) = O(f1(n))×O(f2(n))×O(n) = O(n)×O(n)×O(n) = O(n3) 9、大O记法 10、如何学习数据结构 a. 用户自定义 user defined b. STL (标准C++库) /library STL就是Standard Template Library,标准模板库 ,是一个高效的C++程序库。该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性。 xxxxx xxxxx 蒋莉

文档评论(0)

1亿VIP精品文档

相关文档