-2

在课堂上,我向老师提出了这个问题,他无法回答,这就是我在这里问的原因。我问在代码中,如果我们有一个从 1 到 10 的循环运行,复杂度会是 O(1) {big O of 1} 吗?他回答是的。所以这里的问题是,如果我编写了一个从 1 到 100 万运行的循环,它会是 O(1) 吗?或者是 O(n) 还是别的什么?

伪代码 - 对于范围内的 i(1,100,000):打印(“嘿”)

该循环的时间复杂度是多少

现在,如果你认为答案是 O(n) ,你怎么能说它是 O(n) ,因为 O(n) 是复杂性是线性的。什么是一线希望?当代码得到 O(1) 和 O(n) 时。就像我会为 10 或 100 或 1000 或 10000 或 100000 编写一个循环一样。它何时从 O(1) 转换为 O(n)。

4

2 回答 2

0

根据定义,O(10000000) 和 O(1) 是相等的,让我快速解释一下复杂性的含义。

我们试图用抽象的时间(和空间)复杂性来表示的不是程序运行的速度,而是它what is the growth in runtime (or space) given the growth in input length

例如,给定一个具有固定迭代次数(假设为 10)的循环,您的输入是 1 长还是 10000000000000 都没有关系,因为您的循环将始终运行相同数量的迭代,因此运行时不会增长(甚至如果这 10 次迭代可能需要 1 周才能运行,那么它将始终是 1 周)。

但是,如果您的算法步骤取决于您的输入长度,这意味着您的输入越长,您的算法步骤越长,问题是,还有多少步骤?

总而言之,时间(和空间)复杂性是一种抽象,它不是告诉我们事情需要多长时间,它只是告诉我们时间的增长将如何得到输入的增长O(1) == O(10000000),因为它不是关于多长时间它将需要,它关于运行时的变化,O(1) 算法可能需要 10 年,但它总是需要 10 年,即使对于非常大的输入长度也是如此。

于 2019-09-16T14:51:24.253 回答
0

我认为你混淆了这个词。给定算法的时间复杂度由执行时间变化与输入大小变化之间的关系给出。

如果您正在运行从 1 到 10 的固定循环,但在每次迭代中都做了一些事情,那么这算作 O(10) 或 O(1),这意味着每次运行将花费相同的时间

但是,一旦根据元素或任务的数量开始迭代次数,循环就会变成 O(n),这意味着复杂度变成线性的。任务
越多,时间就越多。

我希望这能澄清一些事情。:-)

于 2019-09-16T14:39:18.957 回答