是否会以O(n ^ 2)复杂度运行循环中的变量?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了是否会以O(n ^ 2)复杂度运行循环中的变量?相关的知识,希望对你有一定的参考价值。
此片段摘自DataCamp示例:
for (log in logs) {
info <- c(info, log$timestamp)
}
我是R的新手,但我有种直觉,认为这会以O(n 2)时间复杂度运行(这意味着将输入大小加倍会导致它运行4倍的时间)。
是吗?如果可以的话,如何更快地迭代建立info
?
答案
您在循环过程中访问了logs
中的每个元素,因此该代码以O(n)时间复杂度运行。 O(n 2)将是如果您对列表中的每个元素都访问过列表中的每个其他元素,即:
for (log in logs) {
for (log in logs) {
info <- c(info, log$timestamp)
}
}
话虽这么说,仅仅因为某事物具有线性复杂度或多项式复杂度并不意味着它是一个好主意(尽管所有事物相等,但绝对相等于另一事物)。还需要考虑其他因素,例如迭代中每个步骤的效率如何,或者集合的大小。
时间复杂度可以告诉您一个总的故事,但并不能为您提供一切。可能会有另一种方法执行相同的操作,该方法具有相同的时间复杂度,但具有更高的操作效率。例如,r2evans在其注释中提供的代码info <- sapply(logs,
$ , "timestamp")
可能具有相同的时间复杂度,但可以更有效地处理整个集合,从而无需您显式构造循环。
以上是关于是否会以O(n ^ 2)复杂度运行循环中的变量?的主要内容,如果未能解决你的问题,请参考以下文章
为啥使用 2 个嵌套循环(O(n^2) 复杂度)解决两个和问题,在仅更改循环计数器逻辑时运行得更快?