《算法技术手册》一2.3 最好、最坏和平均情况下的性能分析

简介: 本节书摘来华章计算机《算法技术手册》一书中的第2章 ,第2.3节, George T.Heineman Gary Pollice Stanley Selkow 著 杨晨 曹如进 译 译更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.3 最好、最坏和平均情况下的性能分析

也许有人会问,上述结果是否对于所有的输入问题样本都成立?第二种排序算法对于同等规模的其他数据样本表现会如何呢?
输入数据可能包含大量已排好序的元素。
输入数据可能包含重复值。
无论输入数据规模n是多少,元素集合都可以从一个非常小的数据集扩展而来,只不过会有相当多的重复值。
从图2-1上可以看出,第四种排序算法虽然在排序n个乱序字符串时最慢,但它在处理已经排好序的数据时却是最快的。不过,这种领先优势消失得非常快,如图2-2所示,在排序32个乱序的字符串时,第三种排序算法的性能最好。
2017_09_19_153908
图2-2:处理完全或者几乎有序的数据时,排序算法的性能
尽管如此,如果一个包含n个字符串的输入“近乎有序”,比如输入数组由有序数组中n/4的字符串(占总字符串的25%)与距离其4个位置的元素交换而得。那么,最终结果会有些出乎意料,如图2-3所示,第四种排序算法的性能表现要远远好于其他排序算法。
对于许多问题来说,单一的最优算法并不存在。选择一个算法需要对问题有着充分的理解,并且知道这个问题将要处理数据规模的概率分布情况,此外还必须考虑算法的实际行为。
这里提供了一些指导性的信息。算法通常可以按以下三类情况进行分析:
最坏情况
最坏情况是指算法对于一类问题样本表现出的最坏性能。通常,算法设计人员在描述最坏情况时,会指出导致算法无法高效执行的输入数据的特征,而并非找出特定的输入数据。
平均情况
平均情况是指算法在随机给定的数据上期望的执行情况。某些问题样本可能会由于一些特例而导致程序需要更长的时间才能完成,但是大多数情况都并非如此。平均情况描述了一般用户对算法性能的期望。
最好情况
最好情况是指算法对于一类问题样本表现出的最好性能。对于这类样本,算法只需要执行很少的计算。在实际情况中,最好情况很少出现。
通过了解算法在每种情况下的性能,读者就能判断它是否适用于特定场景。
2017_09_19_154018
图2-3:第四种排序算法在处理几乎有序的数据时性能最好

相关文章
|
6月前
|
编解码 资源调度 物联网
正交时频空间(OTFS)调制技术:理论基础与性能分析
正交时频空间(OTFS)调制技术在延迟-多普勒域进行信号设计,有效应对高多普勒、短包传输等5G挑战。相比传统OFDM,OTFS通过全时频分集和信道硬化,显著提升高速移动场景下的鲁棒性与分集增益,仿真显示其在BLER性能上可获得3-4dB SNR增益,尤其适用于车联网、物联网等应用场景。
1146 0
正交时频空间(OTFS)调制技术:理论基础与性能分析
|
9月前
|
监控 算法 安全
基于 C# 基数树算法的网络屏幕监控敏感词检测技术研究
随着数字化办公和网络交互迅猛发展,网络屏幕监控成为信息安全的关键。基数树(Trie Tree)凭借高效的字符串处理能力,在敏感词检测中表现出色。结合C#语言,可构建高时效、高准确率的敏感词识别模块,提升网络安全防护能力。
224 2
|
8月前
|
运维 监控 算法
基于 Java 滑动窗口算法的局域网内部监控软件流量异常检测技术研究
本文探讨了滑动窗口算法在局域网流量监控中的应用,分析其在实时性、资源控制和多维分析等方面的优势,并提出优化策略,结合Java编程实现高效流量异常检测。
325 0
|
11月前
|
监控 算法 JavaScript
基于 JavaScript 图算法的局域网网络访问控制模型构建及局域网禁止上网软件的技术实现路径研究
本文探讨局域网网络访问控制软件的技术框架,将其核心功能映射为图论模型,通过节点与边表示终端设备及访问关系。以JavaScript实现DFS算法,模拟访问权限判断,优化动态策略更新与多层级访问控制。结合流量监控数据,提升网络安全响应能力,为企业自主研发提供理论支持,推动智能化演进,助力数字化管理。
278 4
|
11月前
|
存储 监控 算法
内网监控桌面与 PHP 哈希算法:从数据追踪到行为审计的技术解析
本文探讨了内网监控桌面系统的技术需求与数据结构选型,重点分析了哈希算法在企业内网安全管理中的应用。通过PHP语言实现的SHA-256算法,可有效支持软件准入控制、数据传输审计及操作日志存证等功能。文章还介绍了性能优化策略(如分块哈希计算和并行处理)与安全增强措施(如盐值强化和动态更新),并展望了哈希算法在图像处理、网络流量分析等领域的扩展应用。最终强调了构建完整内网安全闭环的重要性,为企业数字资产保护提供技术支撑。
293 2
|
Web App开发 监控 JavaScript
一些常用的 Vue 性能分析工具
【10月更文挑战第2天】
1167 154
|
监控 Java 开发者
Java一分钟之-Java性能分析与调优:JProfiler, VisualVM等工具
【5月更文挑战第21天】本文介绍了Java性能优化的两个利器——JProfiler和VisualVM。JProfiler通过CPU Profiler、内存分析器和线程视图帮助解决过度CPU使用、内存泄漏和线程阻塞问题;VisualVM则聚焦于GC行为调整和类加载优化,以减少内存压力和提高应用性能。使用这些工具进行定期性能检查,是提升Java应用效率的关键。
716 0
|
SQL 缓存 关系型数据库
MySQL高级篇——性能分析工具
MySQL的慢查询日志,用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long-query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为 10,意思是运行10秒以上(不含10秒)的语句,认为是超出了我们的最大忍耐时间值。它的主要作用是,帮助我们发现那些执行时间特别长的 SOL 查询,并且有针对性地进行优化,从而提高系统的整体效率。当我们的数据库服务器发生阻塞、运行变慢的时候,检查一下慢查询日志,找到那些慢查询,对解决问题很有帮助。
MySQL高级篇——性能分析工具
|
缓存 监控 Linux
Linux性能分析利器:全面掌握perf工具
【10月更文挑战第18天】 在Linux系统中,性能分析是确保软件运行效率的关键步骤。`perf`工具,作为Linux内核自带的性能分析工具,为开发者提供了强大的性能监控和分析能力。本文将全面介绍`perf`工具的使用,帮助你成为性能优化的高手。
1082 1