《C程序设计教程》PPT课件.ppt
《《C程序设计教程》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《C程序设计教程》PPT课件.ppt(43页珍藏版)》请在三一办公上搜索。
1、7/29/2023,1,C+程序设计教程(第二版),第六章 性能 Chapter 6 Performance,清华大学出版社,7/29/2023,2,提高性能的意义:性能对提高编程能力举足轻重如何提高性能?以合理使用资源为前提,尽快完成任务的能力称为效率效率影响性能,提高效率就能提高性能学习目标:1.扩展视野,对同一问题的不同要求,模仿各种编程技巧与空间布局策略,予以应对从而对各种不同的问题,亦能应变自如 2.掌握测试性能的方法,学会测算时/空交换的代价,客观评估自身的编程能力,7/29/2023,3,第六章内容,内联函数(Inline Functions)数据结构(Data Structur
2、es)算法(Algorithms)数值计算(Numerical Computation)STL算法(STL Algorithms)动态内存(Dynamic Memory)低级编程(Lower Programming),7/29/2023,4,1.内联函数(Inline Functions),做法:将一些反复被执行的简单语句序列做成小函数用法:在函数声明前加上inline关键字作用:不损害可读性又能提高性能,7/29/2023,5,/=#includebool isDigit(char);/小函数int main()for(char c;cinc/=,频繁调用的函数:用昂贵的开销换取可读性,7/
3、29/2023,6,/=#includeint main()for(char c;cinc/=,内嵌代码:开销虽少,但可读性差,7/29/2023,7,内联方式:开销少,可读性也佳,/=#includeinline bool isDigit(char);/小函数int main()for(char c;cinc/=,内联标记放在函数声明的前面,7/29/2023,8,内联函数的使用经验:,函数体适当小,且无循环或开关语句,这样就使嵌入工作容易进行,不会破坏原调用主体如:排序函数不能内联程序中特别是在循环中反复执行该函数,这样就使嵌入的代码利用率较高如:上例中的isDigit函数程序并不多处出现
4、该函数调用,这样就使嵌入工作量相对较少,代码量也不会剧增,7/29/2023,9,/=#include#includeusing namespace std;/-int calc1(int a,int b)return a+b;inline int calc2(int a,int b)return a+b;/-int main()int x1000,y1000,z1000;clock_t t=clock();for(int i=0;i1000*1000*1000;+i)zi=calc1(xi%1000,yi%1000);cout(clock()-t)/CLK_TCK“without inlin
5、en;t=clock();for(int i=0;i1000*1000*1000;+i)zi=calc2(xi%1000,yi%1000);cout(clock()-t)/CLK_TCK“with inlinen;/=,性能测试,初记时,末记时,非内联函数,内联函数,7/29/2023,10,结果分析:内联用与不用差很多结论:应尽量将函数改造成可内联性质,提高性能,E:ch06f06058.281 without inline2.437 with inline,7/29/2023,11,2.数据结构(Data Structures),揭示:将数据结构实现为数据类型是编程的高级境界,STL容器就
6、是系统提供的现成数据结构做法:充分和合理使用STL容器,简化复杂问题,提高编程效率与程序性能,7/29/2023,12,问题:,有许多序列,每个序列都等待验证是否可从顺序数列经过栈操作而得 例如:顺序数列 1,2,3,4,5 待验证序列 3,2,1,5,4 待验证序列 5,3,4,2,1,7/29/2023,13,采用不同的数据结构,#include#include#include/栈方式:#include/向量方式:#includeusing namespace std;,7/29/2023,14,栈方式,/=int main()ifstream in(rail.txt);for(int n
7、,line=0;inn/=,栈中若不存在读入的元素,则应入栈,创建栈,读入元素不在栈顶即为失败,退栈即逐个逐个过,7/29/2023,15,向量方式,/=int main()ifstream in(rail.txt);for(int n,line=0;inn/=,模仿栈操作,7/29/2023,16,结论,不同的数据结构有不同的操作和性能应学习使用不同数据结构的经验,7/29/2023,17,3.算法(Algorithms),揭示:确定了数据结构之后,所采用的算法将直接决定程序的性能;任何语言都有个性,算法的选择使用是灵巧运用语言的艺术,充分发挥语言的优势是活用算法的根本做法:培养经验,用测试
8、的办法对算法进行选择,7/29/2023,18,问题:,已知不太大的正整数n(n46),求Fibonacci数列 0 1 1 2 3 5 8 13 21 34 的第n项的值对于后面的四种算法:unsigned fibo1(unsigned n);unsigned fibo2(unsigned n);unsigned fibo3(unsigned n);unsigned fibo4(unsigned n);如何选择其中之一,第0项,第1项,第2项,7/29/2023,19,算法:递归法 优点:算法简单,容易编程 缺点:栈空间负担过重,调用开销过大,unsigned fibo1(unsigned
9、n)if(n=1)return n;return fibo1(n-1)+fibo1(n-2);,n=0或1,7/29/2023,20,算法:迭代法 优点:节省空间,节省时间缺点:编程相对复杂,unsigned fibo2(unsigned n)int c=n;for(int a=0,b=1,i=2;i=n;+i)c=a+b,a=b,b=c;return c;,7/29/2023,21,算法3:向量迭代法 优点:节省时间 缺点:n越大,占用堆空间越多,unsigned fibo3(unsigned n)vector v(n+1,0);v1=1;for(unsigned i=2;i=n;+i)vi
10、=vi-1+vi-2;return vn;,7/29/2023,22,算法4:直接计算法 优点:节省时间 缺点:引入了浮点计算,unsigned fibo4(unsigned n)return(pow(1+sqrt(5.0)/2,n)pow(1 sqrt(5.0)/2,n)/sqrt(5.0);,7/29/2023,23,fibo1:只在示意性编程中使用,但并不是否定一切递归法fibo2:在讲究性能的场合中使用,它省空间省时间,但在n很大的场合中,性能比不上fibo4fibo3:可以数组代替向量,提高低级编程的性能,它易编易用,还可以读取中间项的值,但在一味追求性能的场合中,比不上fibo2f
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C程序设计教程 程序设计 教程 PPT 课件
链接地址:https://www.31ppt.com/p-5576789.html