查看“︁算法效率”︁的源代码
←
算法效率
跳转到导航
跳转到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
[[计算机科学]]中,'''算法效率'''是算法的一种属性,算法效率与[[算法]]使用的[[計算資源|计算资源]]量的大小有关。[[算法分析|分析]]算法以确定其资源使用情况,即可根据不同资源的使用情况来衡量算法的效率。算法效率可以被认为类似于某个重复或持续过程的[[生产率|生产力]]大小。 为获得最大效率,一般希望能够尽量减少资源使用量。然而,[[时间复杂度]]和[[空间复杂度]]等不同的资源不能直接比较,因此通常两种算法中哪一种各有效率取决于哪种效率计量被认为是最重要的。 例如,[[冒泡排序]]和[[Timsort]]都是将一个列表中的每一项从小到大排序的[[排序算法]]。冒泡排序对列表进行排序的用时与元素数量平方成正比( <math display="inline">O(n^2)</math> ,参见[[大O符号]]),但只需要较少量的额外[[電腦記憶體|内存]],该内存对于列表的长度来说是常数( <math display="inline">O(1)</math> )。 [[时间复杂度|Timsort]]对列表排序的用时与列表长度呈对数关系( <math display="inline">O(n\log n)</math> ),但空间用量与列表长度[[比例|呈线性]]关系 ( <math display="inline">O(n)</math> )。如果必须对给定应用程序的'''大型列表'''进行'''高速排序''',则[[Timsort]]是更好的选择;但如果以'''内存占用最小化'''为重,那么冒泡排序更优。 == 背景 == [[愛達·勒芙蕾絲|爱达·勒芙蕾丝]]在 1843 年强调了效率相对于时间的重要性,并将其应用于[[查尔斯·巴贝奇]]的机械分析引擎:<blockquote>“在几乎每一个计算中,对于过程的连续性有各种各样的安排是可能的,并且为了计算引擎的目的,各种考虑必须影响它们之间的选择。一个基本目标是选择一种能够将完成计算所需的时间减少到最低限度的安排” <ref>{{Citation|last=Green|first=Christopher|title=Classics in the History of Psychology|url=http://psychclassics.yorku.ca/Lovelace/lovelace.htm|access-date=19 May 2013|archive-date=2013-09-27|archive-url=https://web.archive.org/web/20130927084455/http://psychclassics.yorku.ca/Lovelace/lovelace.htm|dead-url=no}}</ref></blockquote>早期的[[电子计算机]]运算[[定時器訊號|速度]]有限,[[随机存取存储器]](内存)空间也有限。因此,发生了[[时空权衡]]。任务可以选择占用大量内存的快速算法,也可以选择使用少量内存的慢速算法。而后,工程权衡来在内存的限制内使用最快算法。 现代计算机比早期计算机要快得多,并且可用内存量更大('''千兆字节''',而不是以前的'''千字节''')。尽管如此,[[高德纳|Donald Knuth]]强调效率仍然是一个重要的考虑因素:<blockquote>“在已建立的工程学科中,可以轻易获得 12% 的改进,这样的改进从不被认为是微不足道的。我相信同样的观点应该在软件工程中占主导地位。” <ref name="Knuth1974">{{Citation|last=Knuth|first=Donald|title=Structured Programming with go-to Statements|journal=Computing Surveys|volume=6|number=4|pages=261–301|year=1974|url=http://pplab.snu.ac.kr/courses/adv_pl05/papers/p261-knuth.pdf|access-date=19 May 2013|archiveurl=https://web.archive.org/web/20090824073244/http://pplab.snu.ac.kr/courses/adv_pl05/papers/p261-knuth.pdf|archivedate=24 August 2009|doi=10.1145/356635.356640|bibcode=10.1.1.103.6084}}</ref></blockquote> == 概述 == 如果一个算法的资源消耗(也称为计算成本)处于或低于某个可接受的水平,则该算法被认为是'''有效的'''。粗略地说,“可接受”意味着:它将在可用计算机上的合理时间或空间内运行,“合理时间”和“空间”通常为关于输入数据大小的[[函数]]。自 1950 年代以来,计算机的可用计算能力和可用内存量都急剧增加,因此即使在 10 年前,当前可接受的水平也是不可接受的。事实上,由于[[摩尔定律]],在现代[[智能手机]]和[[嵌入式系统]]上可以接受的效率的任务对于 10 年前的工业[[服务器]]来说可能效率低到无法接受。 计算机制造商经常推出[[電腦性能|性能]]更高的新型号。由于修改软件成本可能相当高,在某些情况下,获得更高性能的最简单和最便宜的方法可能是购买一台性能更高的计算机,前提是它与现有计算机[[向下兼容|兼容]]。 有很多方法可以衡量算法使用的资源,两个最常见的衡量标准是'''速度'''和'''内存使用情况。'''其他措施可能包括传输速度、临时磁盘使用、长期磁盘使用、功耗、总拥有成本、对外部刺激的[[反應時間|响应时间]]等。许多这些措施取决于算法输入数据的大小,即要处理的数据量。它们还可能取决于数据的排列方式,例如,某些[[排序算法]]对已经排好序或以几乎全部按相反顺序排序的数据表现不佳。 在实践中,还有其他因素会影响算法的效率,例如对算法准确性、可靠性的要求。如下文所述,算法的实现方式也会对实际效率产生重大影响,尽管这在许多方面都与优化问题有关。 === 理论分析 === 下面是应用于渐近算法时间复杂度的大 O 符号的一些示例: {| class="wikitable" !符号 !名称 !例子 |- |<math>O(1)</math> |[[时间复杂度|常数复杂度]] |从排序好的列表中找到中位数;使用固定大小的[[查找表]];使用合适的[[散列函數|散列函数]]来查找一个元素。 |- | <math>O(\log n)</math> |[[时间复杂度|对数复杂度]] |使用[[二分搜尋演算法|二叉搜索]]或平衡搜索[[树 (数据结构)|树]]以及[[二项堆|二项式堆中]]的所有操作在已排序数组中查找一个元素。 |- | <math>O(n)</math> |[[时间复杂度|线性复杂度]] |在未排序的列表或格式错误的树(最坏的情况)或未排序的数组中查找项目;通过[[加法器]]将两个''n''位整数相加。 |- | <math>O(n\log n)</math> |[[时间复杂度|线性复杂度]]、对数线性或准线性 |执行[[快速傅里叶变换]];[[堆排序]]、[[快速排序]](最佳和平均情况)或[[归并排序|合并排序]] |- |<math>O(n^2)</math> |[[时间复杂度|平方复杂度]] |用[[乘法算法|简单的算法]]计算两个''n''位数的[[乘法|乘积]];[[冒泡排序]](最坏情况或naive implementation)、 [[希尔排序|Shell 排序]]、快速排序(最坏情况)、[[选择排序]]或[[插入排序]] |- |<math>O(c^n),\;c>1</math> |[[时间复杂度|指数复杂度]] |使用[[动态规划]]找到[[旅行推销员问题|旅行商问题]]的最优(非[[旅行推销员问题|近似]])解;使用[[暴力搜索]]确定[[布尔可满足性问题|两个逻辑语句是否等效]] |} === 基准测试:衡量性能 === 对于新版本的软件或提供与竞争系统的比较,有时会使用[[基准测试]],这有助于衡量算法的相对性能。例如,如果产生了一种新的[[排序算法]],则可以将其与其前身进行比较,以确保它至少与以前一样有效地处理已知数据,同时考虑到任何功能改进。客户在比较替代供应商的各种产品时可以使用基准来估计哪种产品在功能和性能方面最适合他们的特定要求。例如在[[大型计算机]]领域, Syncsort等独立软件公司的某些专有分类产品与[[IBM]]等主要供应商的产品竞争效率。 一些基准测试提供了比较分析各种编译和解释语言的相对速度的机会<ref name="fourmilab.ch">{{Cite web|title=Floating Point Benchmark: Comparing Languages (Fourmilog: None Dare Call It Reason)|url=http://www.fourmilab.ch/fourmilog/archives/2005-08/000567.html|access-date=14 December 2011|date=4 August 2005|publisher=Fourmilab.ch|archive-date=2011-12-11|archive-url=https://web.archive.org/web/20111211060226/http://www.fourmilab.ch/fourmilog/archives/2005-08/000567.html|dead-url=no}}</ref> <ref>{{Cite web|title=Whetstone Benchmark History|url=http://www.roylongbottom.org.uk/whetstone.htm#anchorPC2|access-date=14 December 2011|publisher=Roylongbottom.org.uk|archive-date=2012-01-15|archive-url=https://web.archive.org/web/20120115044741/http://www.roylongbottom.org.uk/whetstone.htm#anchorPC2|dead-url=no}}</ref>计算机语言基准游戏比较了几种编程语言中典型编程问题的实现性能。 使用各种用户指定的标准,[[DIY]]基准测试也可以展示不同编程语言的相对性能。这很简单,正如 ''Christopher W. Cowell-Shah'' 的“九种语言性能综述”通过示例演示的那样。 <ref>{{Cite web|title=Nine Language Performance Round-up: Benchmarking Math & File I/O|url=http://www.osnews.com/story/5602|access-date=2018-09-18|author=OSNews Staff|work=www.osnews.com|archive-date=2019-11-28|archive-url=https://web.archive.org/web/20191128215101/https://www.osnews.com/story/5602/|dead-url=no}}</ref> === 算法实现对效率的影响 === 算法的实现方法也可能对效率产生影响,例如编程语言的选择,算法实际编写的方式, <ref name="KriegelSchubert2016">{{Cite journal|title=The (black) art of runtime evaluation: Are we comparing algorithms or implementations?|last=Kriegel|first=Hans-Peter|authorlink=Hans-Peter Kriegel|last2=Schubert|first2=Erich|journal=Knowledge and Information Systems|issue=2|doi=10.1007/s10115-016-1004-2|year=2016|volume=52|pages=341–378|issn=0219-1377|last3=Zimek|first3=Arthur|authorlink3=Arthur Zimek}}</ref>特定语言选择的特定[[編譯器|编译器]],编译时使用的编译选项,甚至正在使用的[[操作系统]]。在许多情况下,由[[直譯器|解释器]]实现的语言(解释语言)可能比由编译器实现的语言(编译语言)慢得多。 <ref name="fourmilab.ch"/>请参阅有关[[即時編譯|即时编译]]和[[直譯器|解释语言]]的文章。 还有其他因素可能会影响时间或空间效率,但这些因素可能超出程序员所能控制的范围,例如[[数据结构对齐]]、[[颗粒度|数据颗粒度]]、[[访问局部性]]、[[快取一致性]]、[[垃圾回收 (計算機科學)|垃圾回收(GC)]]、[[指令層級平行|指令层级并行]]、多线程(硬件或软件级别)、[[同时多线程|同时多线程处理]]和[[子程序]]的调用。 <ref name="steele1997">Guy Lewis Steele, Jr. "Debunking the 'Expensive Procedure Call' Myth, or, Procedure Call Implementations Considered Harmful, or, Lambda: The Ultimate GOTO". MIT AI Lab. AI Lab Memo AIM-443. October 1977.</ref> 一些处理器具有[[向量处理器|向量处理]]能力,允许[[单指令流多数据流]]操作;也许程序员或编译器可以轻易使用这些功能,但也有可能不可以。为顺序处理设计的算法可能需要被完全重构来利用[[并行计算]],或者它们可以很容易地重新配置。随着[[并行计算]]和[[分布式计算]]在 2010 年代后期变得越来越重要,并行和分布式计算系统(如[[CUDA]] 、 [[TensorFlow]] 、 [[Apache Hadoop|Hadoop]] 、 [[OpenMP]]和[[訊息傳遞介面|MPI]] )的高效[[高级语言|高级]][[应用程序接口|API]]被越来越多地投资。 编程中可能出现的另一个问题是与相同[[指令集架構|指令集]](例如[[x86-64]]或[[ARM架構|ARM]] )兼容的处理器可能以不同的方式实现指令,因此在某些架构上相对较快的指令在其他架构上可能相对较慢.这通常会给优化编译器带来挑战,编译器必须对编译目标平台上可用的特定[[中央处理器|CPU]]和其他硬件有大量了解,才能最好地优化程序的性能。在极端情况下,编译器可能被迫[[仿真器|模拟]]目标平台不支持的指令,迫使它[[代码生成|生成代码]]或[[链接器|链接]]外部[[函式庫|库调用]]以产生在该目标平台上无法计算的结果,即使它是编译平台上是支持的,在其他平台上的硬件效率更高。在[[浮点数|浮点运算]]的[[嵌入式系统]]中经常出现这种情况,其中[[低功耗设计|单片机]]通常缺乏对浮点运算的硬件支持,因此需要计算昂贵的软件例程来产生浮点计算。 == 资源使用量的测量 == 度量通常表示为输入大小的函数<math>\scriptstyle {n}</math> . 最常见的两种测量方法是: * '''时间''':算法完成需要多长时间? * '''空间''':算法需要多少工作内存(通常是 RAM)?这有两个方面:代码所需的内存量(辅助空间使用)和代码操作的数据所需的内存量(内在空间使用)。 对于由电池供电的计算机(例如[[筆記型電腦|笔记本电脑]]和[[智能手机]]),或用于非常长时间或大量计算的计算机(例如[[超级计算机]]),其他感兴趣的度量是: * '''直接功耗''':直接运行计算机所需的功率。 * '''间接功耗''':制冷、照明等所需的电力。 {{As of|2018}},从[[嵌入式系统|嵌入式]][[物联网|物联网设备]]到[[单片系统|单片机]]再到[[服务器农场]],功耗正在成为所有类型和所有规模的计算任务的重要指标。 这种趋势通常被称为[[绿色计算]]。 在某些情况下,不太常见的计算效率度量也可能是相关的: * '''传输大小''':带宽可能是一种限制因素。[[数据压缩]]可减少要传输的数据量。在网页上显示图片或图像(例如Google logo)可能会导致传输数万字节的数据(在本例中为 48K),而若只传输文本“Google”则为 6 个字节。这对于I/O 绑定的计算任务而言很重要。 * '''外部空间''':运行算法在磁盘或其他外部存储设备所需的空间。这可能是算法执行时的临时存储,也可能是需要进行长期存储以备将来使用。 * '''响应时间'''([[延迟 (工程学)|延迟]]):当计算机系统必须[[事件驅動程式設計|快速响应某些外部事件]]时,这与[[实时计算]]特别相关。 * '''总拥有成本''':如果计算机专用于一种特定算法,这将特别受关注。 === 时间 === ==== 理论 ==== [[算法分析|分析]]算法,通常使用[[时间复杂度]]分析来估计运行时间作为输入数据大小的函数。结果通常使用[[大O符号|大 O 表示法表示]]。这对于比较算法很有用,尤其是在要处理大量数据时。当数据量较小时,需要更详细的估计来比较算法的性能,尽管这可能不太重要。[[平行演算法|包含并行处理的算法]]可能更难分析。 ==== 实践 ==== 使用[[基准测试|基准]]来计时算法的使用。许多编程语言都有提供CPU 时间使用的可用功能。对于长时间运行的算法,经过的时间也可能很重要。结果通常应在几次测试中取平均值。 基于运行的分析对硬件配置以及在[[多元處理|多处理]]和[[多任务处理|多编程]]环境中同时运行的其他程序或任务的可能性非常敏感。 这种测试还很大程度上取决于特定编程语言、编译器和编译器选项的选择,因此被比较的算法必须都在相同的条件下实现。 === 空间 === 本节涉及执行算法时内存资源([[寄存器]]、[[缓存]]、 [[随机存取存储器|RAM]] 、[[虚拟内存]]、[[電腦數據存貯器|辅助内存]])的使用。至于上面的时间分析,[[算法分析|分析]]算法,通常使用[[空间复杂度]]分析来估计所需的运行时内存,作为输入数据大小的函数。结果通常使用[[大O符号|大 O 表示法表示]]。 内存使用最多有四个方面需要考虑: * 保存算法代码所需的内存量。 * 输入数据所需的内存量。 * 任何[[I/O|输出数据]]所需的内存量。 ** 一些算法,例如排序,通常会[[原地算法|重新排列输入数据]],并且不需要任何额外的空间来存储输出数据。此属性称为“[[原地算法|就地]]”操作。 * 计算期间作为工作空间所需的内存量。 ** 这包括[[局部变量]]和计算期间[[子程序|调用的例程所需的任何堆栈空间]];这个堆栈空间对于使用[[递归 (计算机科学)|递归]]技术的算法可能很重要。 早期的电子计算机和家用计算机的工作内存量相对较少。例如,1949 年的[[延遲存儲電子自動計算器|电子延迟存储自动计算器]](EDSAC)的最大工作内存为 1024 个 17 位字,而 1980 年的 Sinclair ZX80起初具有 1024 个 8 位字节的工作内存。在 2010 年代后期,[[个人电脑]]通常具有 4 到 32 [[吉字节|GB]]的内存,这增加了 3 亿多倍。 ==== 缓存和内存层次结构 ==== 当前的计算机可能具有相对较大的内存量(可能是千兆字节),因此将算法压缩到有限的内存量中的问题比过去要小得多。但是下列四种不同类型的内存可能很重要: * [[寄存器]],最快的计算机内存,但存储空间最少。现代计算机上的大多数直接计算发生在寄存器中的源操作数和目标操作数,然后根据需要更新到缓存、主内存和虚拟内存。在[[多核心處理器|处理器内核]]上,通常有数百字节或更少的可用寄存器,尽管[[寄存器堆]]可能包含的物理[[指令集架構|架构]]寄存器可能比指令集架构中定义的更多。 * [[CPU缓存|高速缓冲]]是计算机第二快和第二小的可用内存。缓存位于 CPU、GPU、硬盘驱动器和外围设备中,通常以[[静态随机存取存储器|静态RAM]]的方式实现。内存缓存分为多个层级;较低的级别更大、更慢,并且通常在[[多核心處理器|多核处理器]]中的[[中央处理器|处理器内核]]之间共享。为了处理高速缓存中的操作数,[[处理器 (计算)|处理单元]]必须从高速缓存中取出数据,在寄存器中执行操作并将数据写回高速缓存。在[[CPU缓存|L1 缓存]]中,它的运行速度与 CPU 或 GPU 的[[算術邏輯單元|算术逻辑单元]]或[[浮点运算器|浮点]]单元相当(大约慢 2-10 倍)。 <ref name="CompArc:QuantApp">{{Cite book|last=Hennessy|first7=Thomas M|language=en|edition=Sixth|isbn=978-0128119051|date=2011|title=Computer Architecture: a Quantitative Approach|first9=Diana|last9=Franklin|first8=José|last8=Duato|last7=Conte|first=John L|first6=Abhishek|last6=Bhattacharjee|first5=Robert P|last5=Colwell|first4=Jason D|last4=Bakos|first3=Krste|last3=Asanović|first2=David A|last2=Patterson|oclc=983459758}}</ref>若L1[[缓存]]未命中并且必须从[[CPU缓存|L2缓存]]中检索和写入,则速度会慢 10 倍;如果 L2 缓存仍未命中并且必须从[[CPU缓存|L3缓存]]中检索,则会再慢 10 倍。 * [[電腦數據存貯器|主内存]]通常以[[动态随机存取存储器|动态RAM]] (DRAM) 实现。主内存比 L3 CPU 缓存大得多(通常为[[吉字节|千兆字节]],而 ≈8[[百萬位元組|兆字节]]),读取和写入延迟通常慢 10-100 倍。 <ref name="CompArc:QuantApp" />{{As of|2018}} , RAM 越来越多地[[单片系统|在处理器的芯片上]]实现,如 CPU 或GPU 内存。 * [[虚拟内存]]一般在[[電腦數據存貯器|二级存储]](如[[硬盘]])中实现,它是[[記憶體階層|内存层次结构]]的扩展,更大的存储空间更大但延迟更大,通常比 RAM 中缓存未命中慢约 1000 倍。<ref name="CompArc:QuantApp" />虽然最初的动机是创造比实际可用内存更多的印象,但虚拟内存在当代使用中更为重要,因为它的[[时空权衡]]和支持[[虛擬機器|虚拟机]]的使用。 <ref name="CompArc:QuantApp" />在虚拟内存中,来自主内存的高速缓存未命中称为[[页缺失|页面错误]],将对程序造成巨大的性能损失。 内存需求将适合高速缓存内存的算法将比适合主内存的算法快得多,而主内存又将比必须求助于虚拟内存的算法快得多。正因为如此,[[快取文件置換機制|缓存替换策略]]对于高性能计算极其重要,缓存感知编程和[[数据结构对齐|数据对齐]]也是如此。使问题进一步复杂化的是,一些系统具有多达三个级别的高速缓存,具有不同的有效速度。不同的系统将有不同数量的这些不同类型的内存,因此算法内存需求的影响可能因系统而异。 在电子计算的早期,如果一个算法及其数据不适合主存储器,那么该算法就无法使用。如今,虚拟内存的使用似乎提供了很多内存,但以性能为代价。如果一个算法及其数据适合缓存,那么可以获得非常高的速度;在这种情况下,最小化空间也有助于最小化时间。这称为[[定域性原理|局部性原理]],可细分为[[访问局部性|参考局部性]]、[[定域性原理|空间局部性]]和[[访问局部性|时间局部性]]。不完全适合高速缓存但表现出引用局部性的算法可能会执行得相当好。 == 对编程现状的批评 == * [[英国]][[電腦科學家|计算机科学家]]、现任[[布里斯托尔大学|布里斯托大学]][[计算机科学]][[教授]]、 XMOS Semiconductor创始人兼[[首席技术官]]David May FRS 认为,问题之一是依赖[[摩尔定律]]来解决低效率问题。他提出了摩尔定律([[維爾特定律|梅定律]])的“替代方案”,如下所述: <ref>{{Cite web|title=Archived copy|url=http://www.cs.bris.ac.uk/~dave/iee.pdf|access-date=23 February 2009|archive-url=https://web.archive.org/web/20160303181322/http://www.cs.bris.ac.uk/~dave/iee.pdf|archive-date=3 March 2016}}</ref> <blockquote>“软件效率每 18 个月减半,以补偿摩尔定律。”</blockquote> : May继续说: <blockquote>“在移动平台中,将执行的指令减半可以使电池寿命加倍,巨大的数据量将为更好的软件和算法带来巨大机会:当 <math>N</math> 很大时,将操作数从 <math>N^2</math> 减少到<math>N\log{N}</math>具有显著效果…当N=300亿时,这种变化相当于 50 年的技术改进。”</blockquote> * 软件作者 Adam N. Rosenburg 在他的博客“数字计算机的失败”中将当前的编程状态描述为接近“软件事件'''视界'''”,(暗指[[道格拉斯·亚当斯|道格拉斯亚当斯]]的《[[银河系漫游指南]]》<ref>{{Cite web|title=The Failure of the Digital Computer|url=http://www.the-adam.com/adam/rantrave/computers.htm|access-date=2022-05-04|archive-date=2019-11-23|archive-url=https://web.archive.org/web/20191123115350/http://www.the-adam.com/adam/rantrave/computers.htm|dead-url=no}}</ref> )。他估计自 1980 年代以来,已经有70dB的生产力因子损失或“其交付货物能力的 99.99999%” ——当[[亞瑟·查理斯·克拉克|Arthur C. Clarke]]在他的著作2001: A Space Odyssey中将 2001 年的计算现实与计算机[[HAL 9000]]进行比较时,他指出计算机是多么小巧而强大,但计算机编程却多么令人失望。 == 最佳算法竞赛 == 以下比赛根据由评委决定的一些任意标准邀请最佳算法参赛: * [[连线]]<ref>{{Cite news|url=https://www.wired.com/magazine/2010/11/mf_algorithmolympics/all/1|work=Wired|first=Jason|author=Fagone|title=Teen Mathletes Do Battle at Algorithm Olympics|date=29 November 2010|accessdate=2022-05-04|archive-date=2014-03-16|archive-url=https://web.archive.org/web/20140316232556/http://www.wired.com/magazine/2010/11/mf_algorithmolympics/all/1|dead-url=no}}</ref> == 参见 == * [[算法分析]] * [[算术编码]] * [[关联数组]] * [[基准测试]] * Best, worst and average case * [[二分搜尋演算法]] * Branch table * Comparison of programming paradigms * Compiler optimization * Computational complexity of mathematical operations * [[計算複雜性理論]] * [[電腦性能]] * [[数据压缩]] * [[数据库索引]] * [[熵編碼法]] * [[垃圾回收 (計算機科學)]] * [[绿色计算]] * [[霍夫曼编码]] * [[访问局部性]] * Loop optimization * [[記憶體管理]] * Optimization (computer science) * [[性能分析]] * [[实时计算]] * [[算法分析]] * [[同时多线程]] * {{Section link|Sorting algorithm|Comparison of algorithms}} * [[推测执行]] * [[求值策略]] * [[分支預測器]] * Super-threading ** [[超執行緒]] * Threaded code * Virtual method table == 参考 == [[Category:软件质量]] [[Category:软件优化]] [[Category:電腦性能]] [[Category:算法分析]]
该页面使用的模板:
Template:As of
(
查看源代码
)
Template:Citation
(
查看源代码
)
Template:Cite book
(
查看源代码
)
Template:Cite journal
(
查看源代码
)
Template:Cite news
(
查看源代码
)
Template:Cite web
(
查看源代码
)
Template:Section link
(
查看源代码
)
返回
算法效率
。
导航菜单
个人工具
登录
命名空间
页面
讨论
不转换
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
特殊页面
工具
链入页面
相关更改
页面信息