输入为O(n log n)时算法的时间复杂度

时间:2012-12-03 18:22:25

标签: algorithm time-complexity

我有一个在O(m)时间内运行的算法。该算法接收一组包含m个条目的数据。

通过指定严格正整数输入n来随机生成数据。生成的条目数为O(n log n)。

修改

单独地,生成数据的时间复杂度独立于n(或O(1)),这意味着给定整数n,条目被立即且随机地生成。结果条目的数量是随机的,但是是O(n log n)。例如。 n = 10,然后生成的条目数是一些常数10(log 10)。

数据是手工生成的。然后将得到的m个条目作为输入馈入算法。

问题

我可以假设算法在O(n log n)时间内运行吗?

1 个答案:

答案 0 :(得分:2)

您的问题中存在一些含糊不清的问题,这些含糊不清是为了帮助您内化输入大小和运行时间复杂性之间的关系,或者是由于错误传达导致的简单。

尽我所能解释这种情况:


您的算法复杂度O(m)相对于m 呈线性

因此,自We assume that generating the data is independent of input. i.e. O(1).起,您的时间复杂度仅取决于您指定的生成条目的某些n

所以是的,您可以说算法在O(n log n)时间运行,因为它对大小为m的输入没有任何作用。


回复您的最新问题:

由于一些关键词指的是不同的东西,因此仍然难以理解。但总的来说,我认为这就是你所得到的:

  • 您有一个数据集作为输入,大小为O(n log n),给定一些特定的n。
  • 此数据集仅用作输入,它可以预生成,也可以使用在O(1)时间内运行的某个黑盒子生成,而不管黑盒子的n是多少。 (我们对此问题的黑盒不感兴趣)
  • 然后将此数据集提供给我们实际感兴趣分析的算法。
  • 对于大小为m的输入,该算法具有时间复杂度O(m)。
  • 由于您的输入相对于n的大小为O(n log n),因此通过扩展,您的O(m)线性时间算法的时间复杂度为O(n log n),相对于n。

要看到差异:假设你的算法不是线性的,而是二次O(m ^ 2),那么相对于n,它将具有时间复杂度O(n ^ 2 log ^ 2 n)。