python 中的大 O 表示法

2024-03-31

有谁知道有什么学习大符号的好资源吗?特别是学习如何遍历一些代码并能够看到它会是 O(N^2) 或 O(logN)?最好能告诉我为什么这样的代码等于 O(N log N)

def complex(numbers):
    N = len(numbers)
    result = 0
    for i in range(N):
        j = 1
        while j < N:
            result += numbers[i]*numbers[j]
            j = j*2
    return result 

Thanks!


首先,让我向您定义 O(N log N) 是什么。这意味着该程序最多将运行 N log N 操作,即它的上限为 ~N log N(其中 N 是输入的大小)。

现在,你的 N 是数字的大小,或者你的代码:

N = len(numbers)

请注意,第一个 for 循环从 0 运行到 N-1,总共执行 N 次操作。这就是第一个 N 的来源。

-

那么,log N 从哪里来呢?它来自 while 循环。

在 while 循环中,不断将 2 乘以 j,直到 j 大于或等于 N。

当我们执行循环〜log2(N)次时,这将完成,它描述了我们必须将j乘以2才能得到N。例如,log2(8) = 3,因为我们将j乘以2 3次得到8:

#ofmult. j      oldj
  1      2  2 <- 1 * 2
  2      4  4 <- 2 * 2
  3      8  8 <- 4 * 2

为了更好地说明这一点,我在代码中为 i 和 j 添加了一条 print 语句:

def complex(numbers):
    N = len(numbers)
    result = 0
    for i in range(N):
        j = 1
        while j < N:
            print(str(i) + " " + str(j))
            result += numbers[i]*numbers[j]
            j = j*2
    return result 

当运行时:

>>> complex([2,3,5,1,5,3,7,3])

这是输出的内容:

0 1
0 2
0 4
1 1
1 2
1 4
2 1
2 2
2 4
3 1
3 2
3 4
4 1
4 2
4 4
5 1
5 2
5 4
6 1
6 2
6 4
7 1
7 2
7 4

注意我们的 i 如何从 0...7 (N 次,总共 O(N) ),第二部分,每个 i 总是有 3 个 ( log2(N) ) j 输出。 因此,代码的复杂度为 O(N log2 N)。

另外,我推荐的一些好的网站是:https://rob-bell.net/2009/06/a-beginners-guide-to-big-o-notation/ https://rob-bell.net/2009/06/a-beginners-guide-to-big-o-notation/

还有斯坦福大学教授系列讲座的视频:https://www.youtube.com/watch?v=eNsKNfFUqFo https://www.youtube.com/watch?v=eNsKNfFUqFo

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 中的大 O 表示法 的相关文章

  • 为神经网络打乱两个 numpy 数组

    我有两个 numpy 数组用于输入数据 X 和输出数据 y X np array 2 3 sample 1 x 16 4 dtype float sample 2 x y np array 1 0 sample 1 y 0 1 dtype
  • 区分大小写的实体识别

    我的关键字全部以小写形式存储 例如 折扣耐克鞋 我正在尝试对其执行实体提取 我遇到的问题是 spaCy 在 NER 方面似乎区分大小写 请注意 我不认为这是 spaCy 特有的 当我跑步时 doc nlp u i love nike sho
  • Python Numpy Reshape错误[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我在尝试重塑 3D numpy 数组时遇到一个奇怪的错误 数组 x 的形状为 6 10 300 我想将其重塑为 6 3000 我正
  • 在 Jupyter Notebook 中设置环境变量的不同方法

    在某些情况下 我在 Windows 10 计算机上使用 Jupyter 笔记本 我想通过设置环境变量 GOOGLE APPLICATION CREDENTIALS 来向 GCP 进行身份验证 我想知道 这两种设置环境变量的方式有什么区别 当
  • sy.sympify(str(表达式)) 不等于表达式

    据我了解 str将 SymPy 表达式转换为字符串并sympify将字符串转换为 SymPy 表达式 因此 我希望以下内容成立 对于合理的表达 gt gt gt sy sympify str expr expr True 我尝试过这个 确实
  • Django 查询:“datetime + delta”作为表达式

    好吧 我的问题如下 假设我有下一个模型 这是一个简单的情况 class Period models Model name CharField field specs here start date DateTimeField field s
  • 如何使用 python、openCV 计算图像中的行数

    我想数纸张 所以我正在考虑使用线条检测 我尝试过一些方法 例如Canny HoughLines and FLD 但我只得到处理过的照片 我不知道如何计算 有一些小线段就是我们想要的线 我用过len lines or len contours
  • 当我从本地计算机更改为虚拟主机时,从 python 脚本调用 pdftotext 不起作用

    我编写了一个小的 python 脚本来解析 提取 PDF 中的信息 我在本地机器上测试了它 我有 python 2 6 2 和 pdftotext 版本 0 12 4 我正在尝试在我的虚拟主机服务器 dreamhost 上运行它 它有 py
  • Python sys.modules 包含尚未导入的模块

    我试图了解加载的模块与导入的模块之间的区别 如果有的话 我正在使用 Python 2 7 3 并且只是从命令行运行 Python 如果我执行 import sys sys modules 我得到一个列表 其中包括os 例如 文档说sys m
  • 无法在我的程序中使用 matplotlib 函数

    我正在 Windows 10 中运行 Anaconda 安装 conda 版本 4 3 8 这是我尝试在 python 命令行中运行的代码 import matplotlib pyplot as plt x 1 2 3 4 y 5 6 7
  • 打印一份拥有多个家庭的人员名单,每个家庭都有多个电话号码

    我有一类 Person 它可以有多个 Home 每个 Home 都有一个或多个电话号码 我已经定义了类 但现在我正在尝试创建一个视图 其中列出每个人的所有家庭以及每个家庭地址的所有电话号码 类似于 john smith 123 fake s
  • 如何仅注释堆积条形图的一个类别

    我有一个数据框示例 如下所示 data Date 2021 07 18 2021 07 19 2021 07 20 2021 07 21 2021 07 22 2021 07 23 Invalid NaN 1 1 NaN NaN NaN N
  • 将 Python Selenium 输出写入 Excel

    我编写了一个脚本来从在线网站上抓取产品信息 目标是将这些信息写入 Excel 文件 由于我的Python知识有限 我只知道如何在Powershell中使用Out file导出 但结果是每个产品的信息都打印在不同的行上 我希望每种产品都有一条
  • 我可以在 if 语句中使用“as”机制吗

    是否可以使用as in if类似的声明with我们使用的 例如 with open tmp foo r as ofile do something with ofile 这是我的代码 def my list rtrn lst True if
  • 通过新数据更新绘图,而不是在 Jupyter 笔记本中制作新绘图

    我有一些问题 希望你能帮我解决 我需要使用下拉小部件创建交互式绘图 我可以在其中选择并绘制感兴趣的数据 我通过以下方式做到这一点 import plotly graph objects as go import ipywidgets as
  • 在 anaconda 环境下运行 qsub

    我有一个程序 通常在 Linux 的 conda 环境中运行 因为我用它来管理我的库 指令如下 source activate my environment python hello world py 我怎样才能跑你好世界 py在与 PBS
  • 在不同的 GPU 上同时训练多个 keras/tensorflow 模型

    我想在 Jupyter Notebook 中同时在多个 GPU 上训练多个模型 我正在使用 4GPU 的节点上工作 我想将一个 GPU 分配给一个模型并同时训练 4 个不同的模型 现在 我通过 例如 为一台笔记本选择 GPU import
  • python 日志记录替代方案 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 蟒蛇记录模块 http docs python org library logging html使用起来
  • 正则表达式 - 匹配不包含字符串的模式

    我对正则表达式很陌生 并且一直在寻找方法来做到这一点 但没有成功 给定一个字符串 我想删除以 abc 开头 以 abc 结尾且中间不包含 abc 的任何模式 如果我做 abc abc abc 它将匹配以 b 开头 以 abc 结尾并且中间包
  • 防止 Ada DLL 中的名称损坏

    有没有一种简单的方法可以防止在创建 Ada DLL 时 Ada 名称被破坏 这是我的 adb 代码 with Ada Text IO package body testDLL is procedure Print Call is begin

随机推荐

  • 如何获取没有0x00或0xFF字节的x86_64中的指令指针?

    有没有一种方法可以在不使用指令指针 RIP 的情况下访问指令指针 RIP 中的值call随后是一个pop用汇编语言 或者是否有机器代码操作码可以做到这一点 我一直在谷歌搜索没有明确的结果 我的问题是机器代码中不能有任何零 否则我会收到 SI
  • 故事板继续导致内存泄漏

    I have two UIViewControllers with buttons triggering segue modal to each other I wanted to discover if that s causing an
  • LiveData 在第一次回调后删除观察者

    收到第一个结果后如何删除观察者 下面是我尝试过的两种代码方式 但即使我删除了观察者 它们仍然会不断接收更新 Observer observer new Observer
  • 用于从 LOB 数据类型的 Oracle 数据库检索大字符串的 Java 类

    拥有一个 Oracle 数据库 其字段之一设置为 LOB 大对象 数据类型 当我运行 select 语句时 会抛出此错误 ERROR ORA 22835 Buffer too small for CLOB to CHAR or BLOB t
  • 从芯片组中获取选定的芯片[重复]

    这个问题在这里已经有答案了 我是在 Android 中使用 Chips 的新手 我想在单击按钮时从 ChipGroup 中获取选定的 Chip Made 是以某种方式检查每个 Chip 并将其添加到 Set 中 但希望使其更加高效 不知何故
  • python/genshi 换行符到 html

    段落

    我试图用 genshi 输出评论的内容 但我不知道如何将换行符转换为 HTML 段落 这是一个测试用例 它应该是什么样子 input foo n n n n nbar nbaz output p foo p p bar p p baz p
  • 在Linux中使用循环更改目录

    我想更改目录以在每个目录中执行任务 以下是代码 for i in 1 10 do cd dir subdir i bla bla bla done 但是我收到错误 not found No such file or directory 我已
  • 如何处理和包含标头和库以在不同计算机上构建 Visual Studio 2010 解决方案

    我有一个 Visual Studio 2010 解决方案 需要包含 4 个不同的第三方库和标头 这些第三方依赖项在包含之前会单独安装 所以头文件和库的包含路径在不同的机器上是不同的 现在 我想要的是让不同的开发人员在不同的机器上构建我的解决
  • 处理非重叠范围的建议方法(例如调度)

    我已经见过几次此类问题 并且正在尝试确定以非重叠方式存储范围的最佳方式 例如 当调度某种一次只有一个人可以使用的资源时 我所看到的大多是这样的 PERSON ROOM START TIME END TIME Col Mustard Libr
  • JSP中如何获取HTTP post参数

    I am new to JSP I have a jsp page where a parameter is passed to this jsp page with http post I can see the parameter in
  • 操作无法完成。 (com.facebook.sdk 错误 2。)ios6

    您好 我正在使用 ios 6 进行 facebook 登录 并且我收到此错误作为本机弹出窗口 操作无法完成 com facebook sdk 错误 2 这是我使用的场景 我在模拟器上运行这个 我已通过设置登录 Facebook 应用程序 并
  • .NET 4 中的延迟初始化

    什么是延迟初始化 这是我在谷歌搜索后得到的代码 class MessageClass public string Message get set public MessageClass string message this Message
  • 将 maven-release-plugin 与 git-1.8.5 一起使用

    当使用 git 1 8 5 maven release plugin 使用版本 2 4 2 和 2 3 2 测试 和 mvn 使用版本 3 1 1 和 3 0 5 测试 时 运行mvn release prepare and mvn rel
  • R xts 对象将 xts 对象子集为特定小时内多天的日内数据

    xts 对象中有没有办法执行与下面相同的操作 但对于具有多天日内数据的 xts 对象 下面的工作原理就像一个时钟 但只显示一天的数据 如果我从 22 号到 26 号通过 xts 它就不会 似乎无法一次性完成多天 xts 中的日内数据子集化
  • 在 Spark 中堆叠 ML 算法

    是否有 Spark api 可以在 Spark 中构建堆叠集成 或者应该从头开始构建它们 我在网上没有找到有关此主题的任何资源 正如 AKSW 的评论中所说 在当前的 Apache Spark MLlib 中 Ensemble Models
  • 在打字稿中使用react-redux连接

    我尝试使用 redux 和 react router dom 在 typescript 中构建一个 React 应用程序 当我将 redux 添加到我的应用程序时 我遇到了打字问题 因此 我创建了以下只有一页的最小示例测试页 App jsx
  • 关于比奈公式的一些知识

    为什么比奈公式 O LogN 但不完全是 在时间上比迭代方法 O n 效果更差 static double SQRT5 Math Sqrt 5 static double PHI SQRT5 1 2 public static int Bi
  • 使用nl2br将textarea新行保留到mysql...如何很好地将数据返回到文本框?

    我有一个带有文本区域的表单 其结果被插入到 mysql 数据库中 我使用 nl2br 来保留换行符 但是 因为这会在文本中插入 br 所以当用户去编辑他们在文本区域中输入的内容时 它会显示文本区域中保存在 mysql 中的所有 br 对于不
  • 编写 MVVM 样板代码的更好方法?

    我发现自己最近编写了很多样板 MVVM 代码 并且想知道是否有一种奇特的方法可以绕过编写所有这些代码 我已经使用了ViewModelBase实现的类INotifyPropertyChanged但这并不能解决必须编写所有访问器代码等的问题 也
  • python 中的大 O 表示法

    有谁知道有什么学习大符号的好资源吗 特别是学习如何遍历一些代码并能够看到它会是 O N 2 或 O logN 最好能告诉我为什么这样的代码等于 O N log N def complex numbers N len numbers resu