RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 794557
Accepted
xhr
xhr
Asked:2020-03-06 22:52:55 +0000 UTC2020-03-06 22:52:55 +0000 UTC 2020-03-06 22:52:55 +0000 UTC

为什么用log N而不是lb N来计算算法的复杂度?

  • 772

在所有来源中,算法的复杂性表示为 log N(未指定基数)。这是指以 2 为底的对数。

但是这样的对数有自己的名称lb。此外,这个名称是由ISO 31-11标准化的,使用它可能更合乎逻辑和正确,但由于某种原因这不起作用,为什么?

UPD:我没有任何数学背景,我对对数的了解只是它是指数的倒数。

让我们举一个具体的例子——二分查找。它的复杂性到处都被描述为log N。同时,在我看来, log N仍然意味着 N 以 2 为底的对数,因为 操作数正好是 N 以 2 为底的对数,即 必须提高 2(而不是 10 和不是 100)的幂才能得到 N。因此,老实说,我不理解诸如“因为O(n)表示法中的常数系数无关紧要”或“因为带有大 O 的符号对常数没有反应 - 使用哪个对数无关紧要......”我会很感激一个更详细的答案,不是为数学家写的。“大 O 中的常数无关紧要”的规则是否适用于对数的底?不管它的复杂性是写成以 2 为底还是以 100 为底的对数,它对二分搜索没有任何影响吗?

如果二进制搜索的log N表示以 2 为底的对数,那么为什么不将其写为lb N,因为二进制对数有自己的名称,而不是在不指定底数的情况下编写它?

UPD 2:我理解“O(N) 绝不是比较次数,它是对算法运行时间的估计,最大限度地与实现细节和机器解耦。”

但是这个:“并且由于具有大 O 的记录对常数没有反应 - 使用哪个对数无关紧要......”我不明白。为什么使用哪个对数无关紧要?以下是三个对数的图表 - 二进制、自然和以 0.5 为底:

在此处输入图像描述

让我们采用相同的二分搜索。我们能否将其复杂性替换为从 2 到 10 的对数底?从 2 到 0.5?我不认为我们可以。那些。我们不能在表达式 log N 中替换任意基数,因为依赖性将完全不同 - 这可以在图表中清楚地看到。那。使用哪个对数很重要。还是我错了?

алгоритм
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Best Answer
    Harry
    2020-03-06T22:59:51Z2020-03-06T22:59:51Z

    因为所有的对数都是相同的,直到一个常数:)

    在此处输入图像描述

    而且由于具有大 O 的记录不会对常数做出反应,因此使用哪个对数并不重要......

    更新您的问题更新。

    意义不在于具体的比较次数,而在于这个数量(以及运行时间)如何随着 N 的增长而增长。这绝不是特定操作的具体数量!某些算法的复杂度为O(g(N))的事实只是意味着,如果我们通过实验建立一些算法运行时间对 N 的依赖性的函数并得到一些f(N),那么我们可以找到一些这样的常数c和N 0,对于所有N>=N 0 ,不等式0 <= f(N) <= cg(N)将成立。这是大 O 条目的定义。

    再一次 - O(N) 绝不是比较次数,它是算法运行时间的估计,最大限度地与实现细节和机器解耦。

    更新 2

    我正在实现一个二分搜索算法,我非常愚蠢,所以我做了 20 个比较,而不是一个比较。你做多少就做多少。但是你和我的实现都将在 O(log N) 时间内运行——让我的运行速度比你的慢 100 倍。因为我和你的 N 增加 100 倍的实现都会在一段时间内工作更长的时间——即使每个人都有自己的,比如说,对你来说一分钟,对我来说——一个小时。最主要的是依赖的类型将是相同的 - 增加几倍,增长会有所增加。

    顺便说一句,您的log 2 x和ln x依赖项完全相同 - 您只需要稍微更改沿y轴的比例即可。至于以小于 1 为底的对数 - 正如他们所说,你不应该夸大其词。但即使在这里 - 取模或负常数就足够了:)

    顺便说一下,在这里查看一些链接。

    • 27
  2. xhr
    2020-03-08T20:30:51Z2020-03-08T20:30:51Z

    我想我找到了原始问题的答案:

    “在所有来源中,算法的复杂性都表示为 log N(不指示底数)。这意味着以 2 为底的对数。但是对于这样的对数,有一个名称 lb。此外,这个名称是由 ISO 31 标准化的- 11 并且可能会更合乎逻辑和正确使用它,但由于某种原因这不起作用,为什么?

    在这里: https ://en.wikipedia.org/wiki/Logarithm#Particular_bases

    那些。例如,在计算机科学中,使用 log N 而不是 lb N 或 log N 在特定的底数中,因为从上下文中可以清楚地看出对数的底数。

    正如@Harry 回答的那样,对于O-big,对数的底数可能根本不重要。但是,老实说,我目前的数学知识还不足以对这种说法进行评估。因此,我现在更喜欢“基础由上下文决定”这一事实的更笼统的措辞

    在此处输入图像描述

    UPD:我在一本关于算法的书(仅在二进制搜索部分)中遇到过这样的短语:“它是以 2 为底数、以 10 为底数还是自然对数?在上面的示例中,以 2 为底数适用。但是,由于大 O 符号只关注性能的形状,实际基础并不重要。” 所以,是的,看起来对数的底并不重要)

    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5