首页 > 其他分享 >什么是“大O”符号的简单英文解释?

什么是“大O”符号的简单英文解释?

时间:2023-10-10 20:45:12浏览次数:27  
标签:解释 电话号码 符号 复杂度 名字 英文 情况 电话簿 我们

内容来自 DOC https://q.houxu6.top/?s=什么是“大O”符号的简单英文解释?

我更喜欢尽可能少的形式化定义和简单的数学。


快速提示,我的回答几乎肯定会引起困惑(大O符号)大O符号(这是一个上界)与BigTheta符号“Θ”(这是一个两侧界限)。但在我的经验中,这实际上在非学术环境中的讨论中是很典型的。对此造成的任何困惑表示歉意。


大O复杂度可以用这个图来可视化:

[![Big Oh Analysis](https://i.stack.imgur.com
你可以注意到,我们在这里假设了最坏的情况。当我们在乘6位数的数字时,如果其中一个是4位数,另一个是6位数,那么我们只有24次乘法。然而,我们计算的是'n'的最坏情况,即当两个都是6位数时。因此,Big Oh表示法是关于算法的最坏情况。

电话簿

我想到的下一个最好的例子是电话号码簿,通常称为白页或类似的名字,但它因国家而异。但我要说的是,它按姓氏列出人名,然后是名字、地址和电话号码。

现在,如果你要指导计算机在包含100万个名字的电话簿中查找“John Smith”的电话号码,你会怎么做?忽略你无法猜测“S”开始了多少的事实(让我们假设你不能),你会怎么做?

一个典型的实现可能是打开中间,取第50万份并将其与“Smith”进行比较。如果它恰好是“Smith, John”,那么我们真的很幸运。更有可能的是“John Smith”会在那个名字之前或之后。如果是后者,我们将电话簿的前半部分再分成两半并重复。如果是前者,我们将电话簿的后半部分再分成两半并重复。以此类推。

这就是所谓的二分查找,它在编程中每天都在使用,无论你是否意识到。

所以,如果你想在一本有一百万个名字的电话簿中找到任何一个名字,你实际上可以通过这样做最多20次来找到。在比较搜索算法时,我们决定将这个比较作为我们的'n'。

  • 对于3个名字的电话簿,需要2次比较(最多)。
  • 对于7个名字,最多需要3次。
  • 对于15个名字,需要4次。
  • 对于100万个名字,需要20次。

这是不是令人震惊地好?

从Big Oh的角度来看,这是O(log n)对数复杂度。现在,我们讨论的对数可以是自然对数(底数为e)、对数10、对数2或其他基数。没关系,它仍然是O(log n),就像O(2n2)和O(100n2)仍然都是O(n^2)一样。

在这一点上,有必要解释一下Big Oh可以用来确定算法的三种情况:

  • 最佳情况:在电话簿搜索中,最好的情况是我们一次就找到了名字。这是O(1)常数复杂度
  • 预期情况:如上所述,这是O(log n);以及
  • 最坏情况:这也是O(log n)。

通常情况下,我们不关心最佳情况。我们对预期和最坏情况感兴趣。有时,这些中的一个或另一个可能更重要。

回到电话簿。

如果你有一个电话号码并想找到一个名字呢?警察有一个反向电话簿,但是这样的查找是被公众拒绝的。或者它们被拒绝了吗?技术上,你可以在普通的电话簿中反向查找一个号码。怎么做?

你从名字开始,然后比较号码。如果匹配,那就太好了,如果不匹配,你就继续下一个。你必须这样做,因为电话簿是无序的(至少按电话号码来说)。

因此,要在给定电话号码(反向查找)的情况下找到一个人的名字:

  • 最佳情况:O(1);
  • 预期情况:O(n)(对于50万个);以及
  • 最坏情况:O(n)(对于100万个)。

实际上,数量要少于这个,因为其中一些是等价的(例如,A→B→C和C→B→A是等价的,因为它们使用相同的道路,只是顺序相反)。

实际上,有三种可能性。

  • 将此问题扩展到4个城镇,您将有(根据记忆)12种可能性。
  • 对于5个城镇,有60种可能性。
  • 对于6个城镇,有360种可能性。

这是一个名为阶乘的数学运算的函数。基本上:

  • 5! = 5 × 4 × 3 × 2 × 1 = 120
  • 6! = 6 × 5 × 4 × 3 × 2 × 1 = 720
  • 7! = 7 × 6 × 5 × 4 × 3 × 2 × 1 = 5040
  • 25! = 25 × 24 × … × 2 × 1 = 15,511,210,043,330,985,984,000,000
  • 50! = 50 × 49 × … × 2 × 1 = 3.04140932 × 1064

因此,旅行商问题的BigOh为O(n!)阶乘或组合复杂度

“当你到达200个城镇时,宇宙中没有足够的时间用传统计算机解决该问题。”

值得思考。

多项式时间

我想快速提及的另一个点是,任何具有O(na)复杂度的算法都被称为具有多项式复杂度或可以在多项式时间内解决

O(n)、O(n^2)等都是多项式时间。有些问题无法在多项式时间内解决。世界上某些事情就是基于这个原因而存在的。[公钥加密]是一个典型的例子。在非常大的数字中找到两个质因数是非常计算密集的。如果不是这样,我们就无法使用我们现在使用的公钥系统。

无论如何,这就是我对(希望是简单的英语)BigOh(修订版)的解释。

标签:解释,电话号码,符号,复杂度,名字,英文,情况,电话簿,我们
From: https://www.cnblogs.com/xiaomandujia/p/17755678.html

相关文章

  • 编译型编程语言与解释型编程语言的区别
    我们先看编译型,其实它和汇编语言是一样的:也是有一个负责翻译的程序来对我们的源代码进行转换,生成相对应的可执行代码。这个过程说得专业一点,就称为编译(Compile),而负责编译的程序自然就称为编译器(Compiler)。如果我们写的程序代码都包含在一个源文件中,那么通常编译之后就会直接生成一......
  • MATLAB符号数学计算
       符号计算存放的是精确数据,耗存储空间,运行速度慢,但结果精度高;数值计算则是以一定精度来计算的,计算结果有误差,但是运行速度快。两者的区别是: 数值计算的表达式、矩阵变量中不允许有未定义的自由变量,而符号计算可以含有未定义的符号变量。一、符号对象和符号表达式close......
  • VBA中英文互译
    FunctionTranslationContent(WatAsString)AsStringOnErrorResumeNextDimHttpAsObjectDimMyScriptAsObject,RAsObjectDimRegAsObjectSetReg=CreateObject("Scripting.Regexp")SetHttp=C......
  • 【2023年10月09日】常用软件测试术语说明及中英文对照
      ......
  • 英文文章中常出现的英语单词
    了解一些常用的英语单词是阅读和理解英文文章的良好起点。以下是一些日常英语文章中经常出现的常用单词,以及它们的简短解释:the-定冠词,表示特定或已知的事物。and-连词,表示并列或添加。of-介词,表示所有权、来源等关系。to-介词,表示方向、目的等。in-介词,表示位置、......
  • HTML emoji整理 表情符号
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><title>测试</title></head><body><divstyle="font-size:50px;">......
  • sklearn.pipeline的作用 函数参数解释及代码举例
    sklearn.pipeline是一个实用的工具,可以将多个数据预处理步骤和机器学习模型组合成一个整体,从而简化了机器学习的流程。Pipeline类可以将多个算法模型串联起来,比如将特征提取、归一化、分类组织在一起形成一个典型的机器学习问题工作流。主要带来两点好处:1.直接调用fit和predict方......
  • 软件测试之性能测试实践 、关键词解释 、测试方法
    一、关键词 性能测试中的关键词有响应时间、并发用户数、吞吐量、性能计数器、思考时间,这是性能测试中常用的几个概念,必须要有清晰的认识。(1)响应时间 响应时间的定义可以参考下图,通常的响应时间是指从C1一直到C2全部的时间,这里我想补充的一个知识点是,由于前端性能这些年越......
  • react17源码中部分二进制计算的解释
    theme:qklhk-chocolatehighlight:a11y-darkreact17放弃了之前的expirationTime而启用了lane模型,故而在原来16的基础上又产生了更多的二进制运算,在接下来的一段时间我打算把这些二进制运算都整明白了、关于react为什么会启用lane模型的官方解释js中的二进制位运算都是以32......
  • [pwn之路]patchelf之后,加载符号表!
    前言当你在进行二进制漏洞学习和利用时,经常需要使用调试工具来分析和理解程序的内部工作。在之前的交流中,我们提到了如何使用patchelf来修改二进制文件[Pwn之路]根据所给库,获得远程同环境——使用patchelf的正确姿势,以适应调试的需求,但没有详细介绍如何加载符号表。实际上,对于学......