【问题标题】:What does this graph tell about the time complexity? [closed]这张图说明了时间复杂度是什么? [关闭]
【发布时间】:2015-07-15 11:57:17
【问题描述】:

--X------Y--
0.035 1000
0.089 2000
0.183 3000
0.315 4000
0.502 5000
0.693 6000
0.925 7000
1.222 8000
1.630 9000
1.998 10000
2.234 11000
2.651 12000
3.096 13000
3.667 14000
4.328 15000
4.865 16000
5.496 17000
6.288 18000
7.037 19000
8.036 20000
19.032 30000
34.167 40000
54.505 50000

这里的Y对应编号。作为输入的随机元素的个数,X 是使用 C++ 中的时间函数计算的 (time.h)

我想知道,关于我的排序算法的时间复杂度,你能从这张图中推断出什么?

此图在 X 轴上有时间(以秒为单位),没有。 Y-Axix 上的元素数量:http://tinypic.com/r/24cz600/8 请点击网址

【问题讨论】:

  • 图形是 log-like 或 sqrt-like。但是很难对这个功能说些什么。您可以尝试手动拟合点
  • 有没有办法使用某种技术找出可能的功能?
  • 在 x 轴上绘制 N 会更合乎逻辑,然后您会看到图表看起来像幂律。在对数轴上绘制点会更好,并且可以直接估计 N 应该提高到的功率。
  • tinypic.com/r/f50ec6/8 这是它在对数轴中的样子

标签: c++ sorting time graph time-complexity


【解决方案1】:

您的大 O 几乎可以肯定是 n^2。时间应该在 Y 轴上,因为它是 n 操作的函数。

正如您在图中看到的那样,有一个定义明确、几乎完美拟合 n^2。

【讨论】:

  • 您能再解释一下吗?为什么几乎可以肯定是 n^2?提前致谢。
  • @3ISvZFqczFBVUtz 对他的数据的拟合是 ax^2 + bx + c 的形式,具有非常强的相关系数。在确定大 O 时,只有最大的增长率很重要,即 x^2。 This example 解释的很好。
【解决方案2】:

它表明复杂度几乎肯定是 O(N^2)(因为它工作时间太长)。据此,您可以对排序算法本身提出一些建议 - 例如这可能是冒泡排序。

【讨论】:

  • 它绝对不是 n^2... 图没有增长它正在渐近到一个固定值(似乎)。所以宁愿是 logX(n)... 我是个看不懂图表的傻瓜。
  • @RedX 它是 n^2。时间应该在 Y 轴上,而不是 X 轴上。
  • @dwcanillas 你是完全正确的。抱歉疏忽:(
  • @RedX omg,试着更专心
猜你喜欢
  • 2018-01-10
  • 2017-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多