C++编程规范之7:编程中应该知道何时和如何考虑可伸缩性

简介:

摘要:

    小心数据的爆炸性增长,不要进行不成熟的优化,但是要密切关注渐进复杂性.用户数据的算法应该能够预测所处理的数据量耗费的时间,最好不差于线性关系.如果能够证明优化必要而且非常重要,尤其在数据量逐渐增长的情况下,那么应该集中注意力改善算法的O(N)复杂性,而不是进行小型的优化。

    防范可能的未来,要求我们要避免设计中含有面对更大的文件、更大的数据库、更多像素、更多窗口、更多进程和更多线路上传输的数据时会出现的性能陷阱的现象。

    这一问题的解决方案分为两个部分。首先,即使不知道数据量是否会大到成为某个特定计算的问题,默认情况下也应该避免使用不能很好地应付用户数据量的算法,除非这种伸缩性不好的算法有明显的清晰性和可读性方面的好处。在编写程序时,要预先进行如下的处理:

1.使用灵活的、动态分配的数据,不要使用固定大小的数组。

2.了解算法的实际复杂性。

3.优先使用线性算法或者尽可能快的算法。

4.尽可能避免劣于线性复杂性的算法。

5.永远不要使用指数复杂性的算法。

    其次,如果有测试数据表明优化非常必要而且重要,尤其是在数据量不断增加的情况下,那么应该集中精力改善O(N)复杂性,而不是把精力华仔节省一个多余假发这样的微观优化上。

    总而言之,要尽可能优先使用线性(或者更好的)算法。尽可能合理地避免使用比线性算法差的多项式算法。竭尽全力避免使用指数算法。

相关文章
|
4天前
|
编译器 程序员 C++
C++一分钟之-模板基础:泛型编程
【6月更文挑战第21天】C++模板,泛型编程的关键,让代码跨类型工作,增强重用与灵活性。理解模板基础,如函数和类模板,注意避免特化与偏特化的混淆、编译时膨胀及复杂的错误调试。通过明确特化目的、限制模板使用及应用现代C++技术来优化。示例展示了模板如何自动或显式推导类型。模板元编程虽强大,但初学者宜从基础开始。正确使用模板,提升代码质量,同时保持简洁。
28 3
|
25天前
|
存储 Java 程序员
C++多线程编程基础
C++多线程编程基础
29 2
|
10小时前
|
存储 安全 编译器
【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr
【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr
10 5
|
10小时前
|
存储 编译器 C语言
【C++航海王:追寻罗杰的编程之路】类与对象你学会了吗?(上)
【C++航海王:追寻罗杰的编程之路】类与对象你学会了吗?(上)
6 2
|
11天前
|
算法 安全 编译器
【C++进阶】模板进阶与仿函数:C++编程中的泛型与函数式编程思想
【C++进阶】模板进阶与仿函数:C++编程中的泛型与函数式编程思想
24 1
|
12天前
|
编译器 vr&ar C++
c++primer plus 6 读书笔记 第七章 函数--C++的编程模块
c++primer plus 6 读书笔记 第七章 函数--C++的编程模块
|
20天前
|
算法 编译器 C语言
C++进阶之路:深入理解编程范式,从面向过程到面向对象(类与对象_上篇)
C++进阶之路:深入理解编程范式,从面向过程到面向对象(类与对象_上篇)
21 3
|
10小时前
|
存储 C语言 C++
【C++航海王:追寻罗杰的编程之路】C&C++内存管理你知道哪些?
【C++航海王:追寻罗杰的编程之路】C&C++内存管理你知道哪些?
5 0
|
11小时前
|
Unix 编译器 C语言
【C++航海王:追寻罗杰的编程之路】关键字、命名空间、输入输出、缺省、重载汇总
【C++航海王:追寻罗杰的编程之路】关键字、命名空间、输入输出、缺省、重载汇总
4 0
|
1天前
|
算法 程序员 C语言
C++语言的入门编程整理
C++语言的入门编程整理