【Java数据结构及算法实战】系列003:程序性能的两种表示方式

简介: 本节是《Java数据结构及算法实战》系列的第3节,主要介绍程序性能的两种表示方式。评价一个程序好坏的指标非常多,比如易用性、稳定性、可维护性等等,但一个最为重要的评价指标是性能。性能是其他评价指标的基础。比如,在Web网站响应时间方面,业界的评判标准是主样的:在2秒之内给客户响应被用户认为是“非常有吸引力”的用户体验。在5秒之内给客户响应被用户认为是“比较不错”的用户体验。在10秒之内给客户响应被用户认为是“糟糕”的用户体验。如果超过10秒还没有得到响应,那么大多数用户会认为这次请求是失败的。由此我们可以得出结论,Web网站的性能越好,处理时间越短,响应时间越短,则会有更好

本节是《Java数据结构及算法实战》系列的第3节,主要介绍程序性能的两种表示方式。

评价一个程序好坏的指标非常多,比如易用性、稳定性、可维护性等等,但一个最为重要的评价指标是性能。性能是其他评价指标的基础。

比如,在Web网站响应时间方面,业界的评判标准是主样的:

在2秒之内给客户响应被用户认为是“非常有吸引力”的用户体验。
在5秒之内给客户响应被用户认为是“比较不错”的用户体验。
在10秒之内给客户响应被用户认为是“糟糕”的用户体验。
如果超过10秒还没有得到响应,那么大多数用户会认为这次请求是失败的。
由此我们可以得出结论,Web网站的性能越好,处理时间越短,响应时间越短,则会有更好的用户体验。

所谓程序性能(Program Performance),是指运行一个程序所需要的内存大小和时间。有两个专业的术语来代表程序在运行时所要占用的内存大小和时间,那就是空间复杂度和时间复杂度。

  1. 空间复杂度

程序的空间复杂度(Space Complexity)是指运行完一个程序所需要的内存大小。对一个程序的空间复杂度感兴趣的主要原因如下:

如果程序将要运行在一个多用户计算机系统中,可能需要指明分配给该程序的内存大小。
对任何一个计算机系统,想提前知道是否有足够可用的内存来运行该程序。
一个问题可能有若干个内存需求各不相同的解决方案。比如,对于某类应用程序有两个不同的版本,这两个版本分别回占用的内存空间为1G和2G不同的版本,占用内存越大运行速度越快。如果当前的计算机少于2G的内存,则只能选择1G的版本。如果计算机大于2G的内存,则只可选择2G的版本。
可以利用空间复杂度来估算一个程序所能解决的问题的最大规模。例如,在“学生信息管理系统”中,一个Student类型的对象可能占用1K字节的内存。当可利用的内存总量为1024K字节,那么最大可以处理1024个学生的信息。

  1. 时间复杂度

程序的时间复杂度(Time Complexity)是指运行完该程序所需要的时间。需要关注程序的时间复杂度的原因有以下几点:

有些系统需要用户提供运行时间的上限,一旦达到这个上限,客户端程序将被强制结束。比如,数据库的客户端连接会话往往会设置一个超时时间,当客户端的执行时间大于会话的超时时间时,该会话会被终止。这种办法可以避免某个客户端长时间占用系统资源而导致整个系统不可用。
交互式程序往往要求实时响应。比如,访问Web网站,用户总是期望网页能够及时响应。
如果一个问题有多种解决方案,那么具体采用哪种方案,主要根据这些方案的性能差异。对于各种方案的时间和空间的性能,需要权衡考虑。比如,在一个实时性要求比较高的场景下,往往会将经常访问的数据缓存在内存中(比如Redis),从而提升查询的效率,这就是一个典型的牺牲空间性能换取时间性能的场景。
简言之,空间复杂度和时间复杂度越小的程序,其性能越高。如果空间复杂度和时间复杂度两者不可兼得,则需要权衡。

参考引用
原本同步至:https://waylau.com/two-ways-to-express-program-performance/
本系列归档:https://github.com/waylau/java-data-structures-and-algorithms-in-action
数据结构和算法基础(Java语言实现):https://item.jd.com/13014179.html

目录
相关文章
|
7天前
|
监控 算法 网络协议
Java 实现局域网电脑屏幕监控算法揭秘
在数字化办公环境中,局域网电脑屏幕监控至关重要。本文介绍用Java实现这一功能的算法,涵盖图像采集、数据传输和监控端显示三个关键环节。通过Java的AWT/Swing库和Robot类抓取屏幕图像,使用Socket进行TCP/IP通信传输图像数据,并利用ImageIO类在监控端展示图像。整个过程确保高效、实时和准确,为提升数字化管理提供了技术基础。
40 15
|
2月前
|
算法 数据处理 C语言
C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合
本文深入解析了C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合,旨在帮助读者掌握这一高效的数据处理方法。
51 1
|
13天前
|
缓存 算法 搜索推荐
Java中的算法优化与复杂度分析
在Java开发中,理解和优化算法的时间复杂度和空间复杂度是提升程序性能的关键。通过合理选择数据结构、避免重复计算、应用分治法等策略,可以显著提高算法效率。在实际开发中,应该根据具体需求和场景,选择合适的优化方法,从而编写出高效、可靠的代码。
25 6
|
2月前
|
存储 算法 搜索推荐
Python 中数据结构和算法的关系
数据结构是算法的载体,算法是对数据结构的操作和运用。它们共同构成了计算机程序的核心,对于提高程序的质量和性能具有至关重要的作用
|
24天前
|
存储 缓存 安全
Java 集合江湖:底层数据结构的大揭秘!
小米是一位热爱技术分享的程序员,本文详细解析了Java面试中常见的List、Set、Map的区别。不仅介绍了它们的基本特性和实现类,还深入探讨了各自的使用场景和面试技巧,帮助读者更好地理解和应对相关问题。
40 5
|
2月前
|
数据采集 存储 算法
Python 中的数据结构和算法优化策略
Python中的数据结构和算法如何进行优化?
|
2月前
|
算法
数据结构之路由表查找算法(深度优先搜索和宽度优先搜索)
在网络通信中,路由表用于指导数据包的传输路径。本文介绍了两种常用的路由表查找算法——深度优先算法(DFS)和宽度优先算法(BFS)。DFS使用栈实现,适合路径问题;BFS使用队列,保证找到最短路径。两者均能有效查找路由信息,但适用场景不同,需根据具体需求选择。文中还提供了这两种算法的核心代码及测试结果,验证了算法的有效性。
112 23
|
2月前
|
算法
数据结构之蜜蜂算法
蜜蜂算法是一种受蜜蜂觅食行为启发的优化算法,通过模拟蜜蜂的群体智能来解决优化问题。本文介绍了蜜蜂算法的基本原理、数据结构设计、核心代码实现及算法优缺点。算法通过迭代更新蜜蜂位置,逐步优化适应度,最终找到问题的最优解。代码实现了单链表结构,用于管理蜜蜂节点,并通过适应度计算、节点移动等操作实现算法的核心功能。蜜蜂算法具有全局寻优能力强、参数设置简单等优点,但也存在对初始化参数敏感、计算复杂度高等缺点。
64 20
|
2月前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
73 5
|
2月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
65 1