freeCodeCamp/guide/chinese/computer-science/notation/big-o-notation/index.md

64 lines
4.2 KiB
Markdown
Raw Normal View History

---
title: Big O Notation
localeTitle: 大O符号
---
## 大O符号
_作为一名计算机科学家如果您正在处理一个重要的软件您可能需要能够估计一些算法或其他算法的运行速度。_
Big O表示法用于计算机科学中以描述算法的性能或复杂性。实际上Big O表示法是一种特殊符号可以告诉您算法的速度有多快。当然您经常使用预定义的算法 - 当您这样做时,了解它们的速度或速度至关重要。
#### Big O符号是什么样的
![](https://user-images.githubusercontent.com/5860906/31781171-74c6b48a-b500-11e7-9626-f715b37b10f0.png) 这将告诉您算法将执行的操作数。它被称为Big O表示法因为你在操作次数之前放置了一个“大O”。
#### Big O建立了最坏情况的运行时间
假设您是治疗Harry Abbit的医生您可能会查看与Harry Abbit的病史相关的电子记录他是列表中的第一个人。让我们考虑一下他的生命取决于所有可用的医疗数据的情况。 假设您使用简单搜索在电子记录中查找某个人。您知道简单搜索需要花费On时间才能运行因此您必须查看Abbit的每个条目。当然您已经注意到Abbit是第一个条目因此您不必查看每个条目 - 您在第一次尝试时就找到了它。
_这个算法花了On时间吗或者它花了O1时间因为你第一次尝试找到了这个人_
在这种情况下这是最好的情况。但Big O符号是关于最坏情况的。这是On时间简单搜索仍然需要。令人放心的是简单搜索永远不会比On时间慢。
#### 算法运行时间以不同的速率增长
我们假设检查一个条目需要1毫秒。通过简单的搜索医生必须检查10个条目因此搜索需要10毫秒才能运行。另一方面他只需要用_二进制搜索算法_检查3个元素log10大约是3因此搜索需要3毫秒才能运行。
但实际上,该列表将有超过一百个元素。
_如果是这样简单搜索需要多长时间二进制搜索需要多长时间_
使用10亿个项目进行简单搜索的运行时间为10亿毫秒即11天。问题是二进制搜索和简单搜索的运行时间_不会以相同的速率增长_ 。
![](https://user-images.githubusercontent.com/5860906/31781165-723a053c-b500-11e7-937c-7b33db281efe.png)
因此随着数字列表变大二进制搜索变得比简单搜索快得多。也就是说随着项目数量的增加二进制搜索需要更多的时间来运行。但是简单的搜索需要更多_的_时间来运行。因此随着数字列表变大二进制搜索变得比简单搜索快得多。
_这就是为什么它不足以知道算法运行多长时间 - 你需要知道运行时间随着列表大小的增加而增加。这就是Big O符号的用武之地。_
#### Big O表示法可让您比较操作次数
例如假设您有一个大小为n的列表。简单搜索需要检查每个元素因此需要n次操作。 Big O表示法中的运行时间为On
_秒数在哪里_
没有 - 大O不会在几秒钟内告诉你速度。 _Big O表示法可让您比较操作次数。_它告诉你算法的增长速度。
![](https://user-images.githubusercontent.com/5860906/31781175-768c208e-b500-11e7-9718-e632d1391e2d.png) </ p
#### 算法最常见的运行时间
根据Big O表示法算法的最常见运行时间列表。 这里有五个大O运行时间你会遇到很多从最快到最慢排序
1. Olog n也称为_日志时间_ 。 示例:二进制搜索。
2. On也称为_线性时间_ 。 示例:简单搜索。
3. On \* log n 示例快速排序算法如quicksort将在第4章中介绍
4. ON2 示例慢速排序算法如选择排序见第2章
5. 上!) 示例:一个非常慢的算法,如旅行销售员(接下来会出现!)。
_本文仅介绍Big O的基础知识。有关更深入的解释请查看各自的FreeCodeCamp算法指南。_
### 更多信息
* [可汗学院](https://www.khanacademy.org/computing/computer-science/algorithms/asymptotic-notation/a/big-o-notation)
* [大O作弊表](http://bigocheatsheet.com/)