【问题标题】:Issue while understanding Big Oh notations?在理解 Big Oh 符号时出现问题?
【发布时间】:2015-08-07 13:09:33
【问题描述】:

根据 CourseEra 算法课程和Introduction to Algorithms ,当存在常数 n0 和 C 使得这个不等式成立时,函数 G(n) (其中 n 是输入大小)被称为 F(n) 的大 oh 表示法

F(n) N0 )

现在, 这个数学定义对我来说很清楚。

但是今天老师教给我的,我很困惑!

他说“Big - Oh Notations 是函数的上限,它就像两个数字的 LCM,即唯一且大于函数”

我不认为这种说法是正确的,Big Oh 符号真的很独特吗?

莫罗弗, 考虑到 Big Oh 符号,我自己也很困惑,为什么我们要将 Big Oh 符号近似到最高阶项。 (我们可以很容易地证明数学不等式虽然可以很好地选择常数)但是它的真正用途是什么? 我的意思是它意味着什么? 我们甚至可以将 F(n) 作为常数 1 的 F(n) 的 Big Oh Notation!

我认为它仅显示了运行时间对最高学位的依赖性!请清除我的疑虑,因为我可能从我的书中理解错误或我的老师犯了错误?

【问题讨论】:

    标签: big-o time-complexity


    【解决方案1】:

    Big Oh 符号真的很独特吗?

    是的,不是的。通过纯公式,Big-O 当然不是唯一的。然而,为了实现其目的,人们实际上不仅试图找到 some 上限,而且还试图找到 lowest 上限。这使得有意义的“Big-O”变得独一无二。

    我们甚至可以将 F(n) 作为 F(n) 的 Big Oh Notation 来表示常数 1!

    是的,我们可能可以做到。但是,Big-O 用于将函数/算法的类别相互关联。说 F(n) 与 X(n) 相关,就像 F(n) 与 X(n) 相关,这就是使用 G(n) = F(n) 得到的结果。没有太大的价值。

    这就是为什么我们试图找到唯一的最低 G 来满足方程。 G(n) 通常是一个相当微不足道的函数,例如 G(n) = n、G(n) = n² 或 G(n) = n*log(n),这让我们可以更轻松地比较算法,因为我们可以很容易地看到,例如,对于所有 n >= 的东西,G(n) = n 小于 G(n) = n²。

    有趣的是,对于大 n,大多数算法的复杂性都收敛到简单的 G(n) 之一。你也可以说,通过查看大的 n,我们试图将 F(n) 的“重要”部分与不那么重要的部分分开;那么我们就省略F(n)中的次要项,得到一个简化的函数G(n)。

    实际上,我们还希望从技术细节中抽象出来。例如,如果我有 F(n) = 4*n 和 E(n) = 2*n,我可以为 F 算法使用两倍的 CPU,并且与 E 算法一样好,而与算法的大小无关输入。也许一台机器有一个专门的平方根指令,所以 SQRT(x) 是一个步骤,而另一台机器需要更多的指令才能得到结果。我们想从中抽象出来。

    这也暗示了另一种观点:如果我有问题要解决,例如“计算 x(y)”,我可以将解决方案表示为“结果:= x(y)”,O(1)。但这不被认为是一种算法。算法规范必须包括相关的详细程度,以便 a) 有意义且 b) Big-O 可访问。

    【讨论】:

    • 为什么我们不将 F(n) 取为 F(n) 的 Big-O 表示法,其中 F(n) 是运行时间?它虽然包含常量和低阶项,但它也满足定义!当我们说运行时间是最高阶项时,它是否变得更有意义?仅仅因为运行时间主要取决于它吗?
    • 是的,为了比较复杂性,这就是我们想要的。 “少即是多”,可以这么说。
    • 但是,在某些情况下,Big-O 给出了更详细的说明。尤其是在现有算法的优化方面,我们希望/需要指定低阶项进行比较。在这些情况下,如果我们有 O(2*n) 或 O(1.5*n),则可能与 state 相关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多