除法的时间复杂度是多少?

2024-05-09

我使用除法算法。

根据https://en.wikipedia.org/wiki/Computational_complexity_of_mathematical_operations https://en.wikipedia.org/wiki/Computational_complexity_of_mathematical_operations该除法具有时间复杂度(以下之一):

O(n log n log log n)
O(n log n 2O(log* n))
O(n**2)
O(M(n))

到目前为止,我在Python中使用了这个算法,但我需要在平台上独立地描述它。对于当今的 Python(或类似语言)用户来说,这些时间复杂度定义中哪一项是正确的?


  1. 如前所述,如果您将 ALU 或 FPU 用于基本变量类型

    你可以假设除法复杂度是O(1)因为指令开销通常与所使用的除法的实际运行时间相当。如果使用的硬件平台不支持除法(例如一些较旧的 MCU),则必须通过程序(而不是单个指令)计算,这不再适用。

    此外,如果您有任意精度变量(bignums),那么实际的数字位或数字宽度开始变得重要,并且您不再处于O(1)在这种情况下,请参阅#2.

  2. 大多数除法算法使用乘法作为核心函数

    然后,除法的复杂性由所使用的算法和所使用的组件来定义。例如,如果您有基本变量但计算除法(没有硬件除法器支持),那么使用的操作仍然是O(1)但所使用的除法不是。

    让我们采取除法重复减法 https://en.wikipedia.org/wiki/Division_algorithm例如。

     variable a=...,b=...,d,r;
     for (d=0,r=a;r>=b;) { r-=b; d++; }
     // d=a/b
     // r=a%b
    

    If n是结果的位宽,那么这是O(2^n)对于基本变量。但如果变量是任意精度,那么所使用的操作就不再是O(1)这使用减法、比较和增量,它们都是O(n)所以除法复杂度将变为O(n*(2^n))无需对算法或代码进行任何更改...因此您始终必须知道您正在谈论的复杂性

    • 基本算法复杂度O(2^n)
    • 组合总复杂度O(n*(2^n))

    该算法未被使用,因为速度非常慢。相反,使用更先进的东西。大多数除法算法都使用乘法作为核心函数,因此 Schönhage–Strassen 和 Karatsuba 与除法算法相关。看:

    • 快速 bignum sqr 用于加速除法 https://stackoverflow.com/q/18465326/2521214
    • 我最喜欢的近似分频器 https://stackoverflow.com/a/18398246/2521214
  3. 现在如何确定自定义划分的复杂度呢?

    将算法的基本复杂度乘以其核心函数的最慢复杂度。如果每次迭代都不使用核心功能,这可能会变得非常棘手......不要忘记使用相同的含义n同时结合/比较复杂性!!!

    如果您无法访问所使用算法的源代码,那么您可以尝试测量除法BIG范围足够大的一组数字n并尝试从测量时间图表估计复杂性 https://stackoverflow.com/a/64784308/2521214...这是不可靠的,因为很多事情都会搞砸,比如多线程、调度粒度、未知n,ETC ...

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

除法的时间复杂度是多少? 的相关文章

  • Python、Tkinter、更改标签颜色

    有没有一种简单的方法来更改按钮中文本的颜色 I use button text input text here 更改按下后按钮文本的内容 是否存在类似的颜色变化 button color red Use the foreground设置按钮
  • InterfaceError:连接已关闭(使用 django + celery + Scrapy)

    当我在 Celery 任务中使用 Scrapy 解析函数 有时可能需要 10 分钟 时 我得到了这个信息 我用 姜戈 1 6 5 django celery 3 1 16 芹菜 3 1 16 psycopg2 2 5 5 我也使用了psyc
  • 如何生成给定范围内的回文数列表?

    假设范围是 1 X 120 这是我尝试过的 gt gt gt def isPalindrome s check if a number is a Palindrome s str s return s s 1 gt gt gt def ge
  • Pycharm Python 控制台不打印输出

    我有一个从 Pycharm python 控制台调用的函数 但没有显示输出 In 2 def problem1 6 for i in range 1 101 2 print i end In 3 problem1 6 In 4 另一方面 像
  • 如何在android上的python kivy中关闭应用程序后使服务继续工作

    我希望我的服务在关闭应用程序后继续工作 但我做不到 我听说我应该使用startForeground 但如何在Python中做到这一点呢 应用程序代码 from kivy app import App from kivy uix floatl
  • DreamPie 不适用于 Python 3.2

    我最喜欢的 Python shell 是DreamPie http dreampie sourceforge net 我想将它与 Python 3 2 一起使用 我使用了 添加解释器 DreamPie 应用程序并添加了 Python 3 2
  • 如何使用 Scrapy 从网站获取所有纯文本?

    我希望在 HTML 呈现后 可以从网站上看到所有文本 我正在使用 Scrapy 框架使用 Python 工作 和xpath body text 我能够获取它 但是带有 HTML 标签 而且我只想要文本 有什么解决办法吗 最简单的选择是ext
  • 打破嵌套循环[重复]

    这个问题在这里已经有答案了 有没有比抛出异常更简单的方法来打破嵌套循环 在Perl https en wikipedia org wiki Perl 您可以为每个循环指定标签 并且至少继续一个外循环 for x in range 10 fo
  • 为 pandas 数据透视表中的每个值列定义 aggfunc

    试图生成具有多个 值 列的数据透视表 我知道我可以使用 aggfunc 按照我想要的方式聚合值 但是如果我不想对两列求和或求平均值 而是想要一列的总和 同时求另一列的平均值 该怎么办 那么使用 pandas 可以做到这一点吗 df pd D
  • 在 NumPy 中获取 ndarray 的索引和值

    我有一个 ndarrayA任意维数N 我想创建一个数组B元组 数组或列表 其中第一个N每个元组中的元素是索引 最后一个元素是该索引的值A 例如 A array 1 2 3 4 5 6 Then B 0 0 1 0 1 2 0 2 3 1 0
  • python pandas 中的双端队列

    我正在使用Python的deque 实现一个简单的循环缓冲区 from collections import deque import numpy as np test sequence np array range 100 2 resha
  • python 集合可以包含的值的数量是否有限制?

    我正在尝试使用 python 设置作为 mysql 表中 ids 的过滤器 python集存储了所有要过滤的id 现在大约有30000个 这个数字会随着时间的推移慢慢增长 我担心python集的最大容量 它可以包含的元素数量有限制吗 您最大
  • 使用 OpenPyXL 迭代工作表和单元格,并使用包含的字符串更新单元格[重复]

    这个问题在这里已经有答案了 我想使用 OpenPyXL 来搜索工作簿 但我遇到了一些问题 希望有人可以帮助解决 以下是一些障碍 待办事项 我的工作表和单元格数量未知 我想搜索工作簿并将工作表名称放入数组中 我想循环遍历每个数组项并搜索包含特
  • 如何改变Python中特定打印字母的颜色?

    我正在尝试做一个简短的测验 并且想将错误答案显示为红色 欢迎来到我的测验 您想开始吗 是的 祝你好运 法国的首都是哪里 法国 随机答案不正确的答案 我正在尝试将其显示为红色 我的代码是 print Welcome to my Quiz be
  • 通过数据框与函数进行交互

    如果我有这样的日期框架 氮 EG 00 04 NEG 04 08 NEG 08 12 NEG 12 16 NEG 16 20 NEG 20 24 datum von 2017 10 12 21 69 15 36 0 87 1 42 0 76
  • Nuitka 未使用 nuitka --recurse-all hello.py [错误] 编译 exe

    我正在尝试通过 nuitka 创建一个简单的 exe 这样我就可以在我的笔记本电脑上运行它 而无需安装 Python 我在 Windows 10 上并使用 Anaconda Python 3 我输入 nuitka recurse all h
  • 在 Pandas DataFrame Python 中添加新列[重复]

    这个问题在这里已经有答案了 例如 我在 Pandas 中有数据框 Col1 Col2 A 1 B 2 C 3 现在 如果我想再添加一个名为 Col3 的列 并且该值基于 Col2 式中 如果Col2 gt 1 则Col3为0 否则为1 所以
  • 用于运行可执行文件的python多线程进程

    我正在尝试将一个在 Windows 上运行可执行文件并管理文本输出文件的 python 脚本升级到使用多线程进程的版本 以便我可以利用多个核心 我有四个独立版本的可执行文件 每个线程都知道要访问它们 这部分工作正常 我遇到问题的地方是当它们
  • 如何使用google colab在jupyter笔记本中显示GIF?

    我正在使用 google colab 想嵌入一个 gif 有谁知道如何做到这一点 我正在使用下面的代码 它并没有在笔记本中为 gif 制作动画 我希望笔记本是交互式的 这样人们就可以看到代码的动画效果 而无需运行它 我发现很多方法在 Goo
  • Python - 字典和列表相交

    给定以下数据结构 找出这两种数据结构共有的交集键的最有效方法是什么 dict1 2A 3A 4B list1 2A 4B Expected output 2A 4B 如果这也能产生更快的输出 我可以将列表 不是 dict1 组织到任何其他数

随机推荐