【发布时间】:2018-05-26 09:55:34
【问题描述】:
我很难使用 O(n) 原则来概括算法的时间复杂度,其更具体的时间复杂度为 O(sum(a)),其中 a 是整数数组。
我的直觉是,这个时间复杂度应该推广到 O(n),因为您可以将其视为出现 n 次的 ki 值的“线性”方程,其中 k 是数组中的整数值,使其 O( n)( 对于直接 O(n) 的情况,k=1)。
但它似乎与 O(n) 并不完全相同 - k 的值可能比 n 大得多,如果所有这些 k 值都更大,那么你就有可能是 O(n^2 ) 或 O(n^3) 取决于该值的大小。
这是否需要考虑 O(n) 复杂度,其中 n 是数组的长度?我真的应该将 n 定义为数组中所有元素的总和,而不是数组的长度吗?
一般来说,思考这个问题的最佳方式是什么?
【问题讨论】:
-
你读过大哦符号的定义吗?
-
是的,当然。但我显然误解、误解或遗漏了一些东西——因此我在这里问。
-
K 的值对计算复杂度没有影响(当然如果它不依赖于“n”的值)
-
但是,您需要在实际问题中考虑 K - 对于较小的“n”值,O(n) 算法的运行速度可能比 O(n^2) 慢.这是由于 O(n) 算法的 K 值较大
-
我明白了,谢谢有道理。谢谢!
标签: algorithm time-complexity big-o