Skip to content

Latest commit

 

History

History
131 lines (66 loc) · 8.34 KB

calculate-algorithm-efficiency.md

File metadata and controls

131 lines (66 loc) · 8.34 KB

如何计算算法效率

原文:www.kdnuggets.com/2022/09/calculate-algorithm-efficiency.html

如何计算算法效率

图片由DeepMind提供,来源于Unsplash

几乎所有形式的技术都使用算法来执行复杂的功能,从搜索引擎到移动应用程序,再到视频游戏和社交媒体。然而,在创建算法时,重要的是使其尽可能简化,以免对运行它的软件或设备造成负担。


我们的前三个课程推荐

1. 谷歌网络安全证书 - 快速进入网络安全职业生涯。

2. 谷歌数据分析专业证书 - 提升你的数据分析水平

3. 谷歌 IT 支持专业证书 - 支持你的组织的 IT


在这篇文章中,我们将讨论如何计算算法效率,重点介绍两种主要的测量方法,并提供计算过程的概述。

什么是算法效率,为什么它很重要?

算法效率与计算机处理算法所需的资源量有关。需要确定算法的效率,以确保它在不发生崩溃或严重延迟的风险下能够运行。如果算法效率不高,它不太可能适合其目的。

我们通过处理算法所使用的资源量来衡量算法的效率。高效的算法使用最少的资源来执行其功能。

算法可以用于各种功能,包括机器学习算法、对抗网络犯罪和使互联网更安全。当你浏览网页时,也应该始终了解如何保护自己免受身份盗窃及其他犯罪活动。

测量算法效率的主要方法是什么?

本节将讨论计算算法效率的两种主要衡量标准。这些是时间复杂度和空间复杂度。然而,它们之间无法直接比较,因此我们需要考虑两者的组合。

空间复杂度

简而言之,空间复杂度指的是在程序执行过程中与函数输入相关的所需内存量,即计算机或设备上所需的内存量。内存类型可能包括寄存器、缓存、RAM、虚拟内存和辅助内存。

分析空间复杂度时,你需要考虑四个关键因素:

  • 存储算法代码所需的内存

  • 输入数据所需的内存

  • 输出数据所需的内存(某些算法,例如排序算法,不需要内存来输出数据,通常只是重新排列输入数据)。

  • 算法计算时所需的工作空间内存。这可以包括局部变量和任何需要的栈空间。

从数学上讲,空间等于下面两个组件的总和:

  • 变量部分包括依赖于算法试图解决的问题的结构化变量。

  • 固定部分指的是与问题无关的部分,包括指令空间、常量空间、固定大小的结构变量和简单变量。

因此,任何算法的空间复杂度 S(a) 计算如下:

S(a) = c(固定部分)+ v(i)(依赖于实例特征 i 的变量部分)

时间复杂度

时间复杂度是执行算法所需的总时间,它依赖于与空间复杂度相同的所有因素,但这些因素被分解成数值函数。

当比较不同算法时,这一度量方法非常有用,特别是在处理大量数据时。然而,如果数据量较小,比较算法性能时需要更详细的估算。当算法使用并行处理时,时间复杂度的效果较差。

时间复杂度定义为 T(num)。它通过步骤数量来衡量,只要每一步等同于常量时间。

算法时间复杂度情况

算法的复杂度由一些关键标准定义,即数据的移动和键的比较——例如,数据的移动次数和键的比较次数。测量算法复杂度时,我们使用三种情况:

  • 最佳情况的时间复杂度

  • 平均情况下的时间复杂度

  • 最坏情况的时间复杂度

计算算法效率的过程

准确计算算法效率时需要完成两个阶段——理论分析和基准测试(性能测量)。我们将下面提供每个阶段的总结。

理论分析

与算法相关的理论分析通常是以渐近方式估计算法复杂度的过程(接近一个值或曲线)。描述算法使用的资源数量最常用的方法是使用 Donald Knuth 的“大 O 符号”。

使用大 O 符号,程序员可以测量算法以确保其在不同输入数据规模下都能高效扩展。

基准测试(性能测量)

在分析和测试新的算法或软件时,会使用基准测试来衡量其性能。这有助于评估算法与其他表现良好的算法相比的效率。

以排序算法为例。使用先前版本排序算法设置的基准测试可以确定当前算法的效率,利用已知数据同时考虑其功能改进。

基准测试还允许分析团队将算法速度与各种编程语言进行比较,以确定是否可以改进。实际上,基准测试可以以各种方式实施,以衡量性能与任何前身或类似软件的对比。

实施挑战

实现新算法有时可能会影响其整体效率。这可能与选择的编程语言、使用的编译器选项、操作系统或算法的编写方式有关。特别是,特定语言使用的编译器可能会对速度产生重大影响。

在测量空间和时间复杂度时,并非所有因素都由程序员决定。诸如缓存局部性和一致性、数据对齐和粒度、多线程以及同时多任务等问题都会影响性能,无论使用何种编程语言或算法编写方式。

运行软件的处理器也可能引发问题;一些处理器可能支持向量或并行处理,而另一些则不支持。在某些情况下,利用这些能力可能并不总是可行,这使得算法效率降低,并需要一些重新配置。

最后,处理器使用的指令集(例如,ARM 或 x86-64)可能会影响指令在各种设备上的处理速度。这使得优化编译器变得困难,因为需要考虑的硬件组合非常多。

结论

一个算法需要非常迅速地处理,因此它必须尽可能完美地执行。这就是为什么每个新算法都要经过测试来计算其效率,通过理论分析和基准测试将其与其他算法进行比较。

时间复杂度和空间复杂度是计算算法效率的两个主要指标,决定了在机器上处理算法所需的资源数量。时间复杂度衡量处理算法所需的时间,而空间复杂度衡量所使用的内存量。

不幸的是,在实施过程中可能会遇到许多挑战,例如使用的编程语言、处理器、指令集等,这些都会给程序员带来头疼的问题。

尽管如此,时间复杂度和空间复杂度已被证明是非常有效的测量方法

Nahla Davies 是一位软件开发者和技术作家。在全职从事技术写作之前,她曾担任 Inc. 5,000 的一家体验品牌机构的首席程序员,该机构的客户包括三星、时代华纳、Netflix 和索尼。

更多相关话题