〖★导 言★〗
本文旨在用简单的术语解释Big O表示法。大多数学生和程序员都理解O(n)和O(1),但是理解O(log n)有点困难。本文将尽可能的简单解释这三个基本的Big O符号。
〖★ 什么是算法?★〗
算法是用于完成某个操作或解决问题的方法。我们都知道解决特定问题的方法不止一种; 同样,有一种以上的算法可以解决给定的问题。
这是一个场景:如果有一个以上的算法/步骤来解决问题,我们怎样才能找到哪个更好或更有效?
为了表示算法的效率,使用Big O表示法 - 例如O(n),O(1),O(log n)。
常见的大O符号是:
O(n):线性时间操作。
O(1):恒定时间操作。
O(log n):对数时间运算。
为了理解Big O表示法,我们需要理解恒定时间操作,线性时间操作和对数时间操作。
现在让我们逐步学习这些带有示例/问题的Big O符号。
〖★ O(n):线性时间操作★〗
要解决的问题:假设我们有一个包含数字的卡片或印有数字的卡片(如1,2,3,4,... 16),我们会被问到是否在框中有数字6。我们需要做什么?
一次选择一个号码并检查我们选择的号码是否为6(要搜索的号码)。
如果我们选择的号码与要搜索的号码匹配,那么我们就是好的。否则,我们需要从框中选择另一个号码。这种一次挑选一个数字并验证它是否一个接一个地匹配直到所有n个数被挑选的方式称为线性操作。这种搜索n个数字的方式表示为O(n)。如果要查找的数字是最后一个数字(最坏的情况),我们需要选择所有n个数字。
〖★ O(1):恒定时间操作★〗
要解决的问题:假设我们得到一个数字框(1,2,3,4,... 16),并且在框外打印,该框包含16个数字。系统会询问您框中有多少个数字/项目。因为你知道盒子被标记为包含16个球,你回复说该盒子包含16个。如果另一个人第二天问你同样的问题,你可以通过查看盒子再次回答,即使你得到另一个100盒子它中的数字,如果它有一个标签,说该框包含100个数字。这称为恒定时间操作。它表示为O(1)。
〖★ O(log n):对数时间操作★〗
要解决的问题:假设我们有一个包含数字(1,2,3,4,... 16)的框,所有数字都是有序的。系统会要求您在框中找到16号。这里的问题是数字是有序的。我们将数字分成两部分。总共16个数字被分成两组,每组包含八个数字。
数字16大于分割中的最大元素,因此要搜索的数字将仅分为2.继续此分割,直到找到数字的末尾或要搜索的数组。
从而:
看看上面的图片,我们可以找到4个步骤的数字(在16个数字的列表中)。
可以写成,
在数学中,如果 n = 2 x则log 2 n = x。(参考二进制对数)
因此16 = 2 4可以写为log 2 16 = 4。
这可以写为log 2 n,或简称为O(log n)。
因此,需要四个步骤来在包含16个数字的框中找到一个数字,每个步骤将该框分成两个(这也称为二分搜索)。
〖★ 另一个例子 ★〗
例如,如果我们有64个数字,那么可以导出查找数字的最大步数,如下所示,
64 = 2 6, 这可以写为log 2 64 = 6.因此,在64个数字的列表中找到一个数字需要最多6个步骤。
〖★ 结语 ★〗
首先谢谢大家对“人工智能架构”公众号的支持,由于最近关注的小伙伴增加,针对大家在后台的留言,有一些小伙伴可能基础稍微薄弱一点,因此,在本次文章中,我们针对某些小伙伴的问题,选择发表了本文的内容。大家有什么意见和建议,欢迎积极踊跃的留言。你们的支持,是我们最大的动力。
长按订阅更多精彩▼