--- 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的病史相关的电子记录(他是列表中的第一个人)。让我们考虑一下他的生命取决于所有可用的医疗数据的情况。 假设您使用简单搜索在电子记录中查找某个人。您知道简单搜索需要花费O(n)时间才能运行,因此您必须查看Abbit的每个条目。当然,您已经注意到Abbit是第一个条目,因此您不必查看每个条目 - 您在第一次尝试时就找到了它。 _这个算法花了O(n)时间吗?或者它花了O(1)时间,因为你第一次尝试找到了这个人?_ 在这种情况下,这是最好的情况。但Big O符号是关于最坏情况的。这是O(n)时间(简单搜索仍然需要)。令人放心的是,简单搜索永远不会比O(n)时间慢。 #### 算法运行时间以不同的速率增长 我们假设检查一个条目需要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表示法中的运行时间为O(n)。 _秒数在哪里?_ 没有 - 大O不会在几秒钟内告诉你速度。 _Big O表示法可让您比较操作次数。_它告诉你算法的增长速度。 ![](https://user-images.githubusercontent.com/5860906/31781175-768c208e-b500-11e7-9718-e632d1391e2d.png)