Algorithm 排序算法的时间复杂度

Algorithm 排序算法的时间复杂度,algorithm,big-o,Algorithm,Big O,关于时间的复杂性,我有两个问题 1) 我似乎还没有掌握大oh或landau的符号。我知道它是用来表示时间复杂度的,但是为什么我不能说最坏情况下的时间复杂度,比如说,冒泡排序是n^2,而不是O(n^2) 2) 为什么日志会在一段时间内变得复杂?例如,shell sort O(nlogn)最坏情况下的时间复杂度究竟是什么 除了维基百科之外,任何关于这些事情的好网站都将受到赞赏 Big-O表示法用于表示您正在谈论的是渐近行为这一事实。如果您只是编写n^2,则可能会假定您正在谈论特定程序的实际运行时(即

关于时间的复杂性,我有两个问题

1) 我似乎还没有掌握大oh或landau的符号。我知道它是用来表示时间复杂度的,但是为什么我不能说最坏情况下的时间复杂度,比如说,冒泡排序是n^2,而不是O(n^2)

2) 为什么日志会在一段时间内变得复杂?例如,shell sort O(nlogn)最坏情况下的时间复杂度究竟是什么

除了维基百科之外,任何关于这些事情的好网站都将受到赞赏

  • Big-O表示法用于表示您正在谈论的是渐近行为这一事实。如果您只是编写
    n^2
    ,则可能会假定您正在谈论特定程序的实际运行时(即,您可以直接从该表达式在几秒钟内获得运行时)。但是在实践中,您的运行时的形式是
    a.n^2+b.n+c.log(n)+d
    。Big-O表示法允许您忽略所有的低阶项,因为当
    n
    走向无穷大时,只有
    n^2
    项才重要

  • 我不确定shell排序的最坏情况复杂性是
    O(n logn)
    。但是
    log
    通常在某些东西被连续分成两部分时出现(例如,想想平衡二叉树的高度)

  • 请通过:


    这个(以及上面同一个网站中的其他数学内容)将从根本上揭开e、log、ln、d/dx、Big-O、增长率等与现实世界相关的许多实际内容的神秘面纱。

    你应该知道这两种说法之间的区别:

  • 算法的复杂度为n^2,且
  • 算法复杂度的顺序是O(n^2)
  • 所以在你的第一个问题中,O(n^2)代表复杂性的顺序,而不是复杂性本身

    第二个问题

    有时,任何问题的解决方案(如二进制搜索)都会创建一个树状结构。此结构意味着原始问题被划分为n个较小的问题,并独立解决。这些较小的问题可以进一步划分为子问题并独立解决。 因此,n是对数的底。 因此,要解决原始问题,必须解决整棵树,对数的概念就出现了,因为对数使解决这些类似树的问题变得容易。


    这个网站让你非常清楚什么是复杂性。

    还有维基百科有什么问题吗?我会给你一个+1的答案,因为当你分析算法时,有一个像你这样的问题是很自然的。我不知道为什么有些人开始投“-”票。作者发帖的目的很清楚,他想了解日志内容是从哪里来的,以及在计算时间复杂性时它是如何来的。UmNyobe,我知道我会得到答案的,但我需要解释,因此我问。维基百科有时很模糊@Yavar,谢谢你对我的情况的理解。从这个网站上看:shell排序的最坏情况时间复杂度取决于递增序列。对于此处使用的增量1 4 13 40 121…,时间复杂度为O(n3/2)。对于其他增量,时间复杂度已知为O(n4/3)甚至O(n·lg2(n))。时间复杂度的严格上界和最佳增量序列都未知。