time-complexity - sort(..) 如何影响我算法的 Big-O 表示法
问题描述
如果我的算法的复杂度为 ,O(n)
但我在内部使用了排序算法,它有O(n log n)
,我是否需要将它们计算在内?
def function(array A):
A.sort()
for i in A:
...
这现在正式是O(n)
还是O(n log n)
?
解决方案
整体复杂度取决于A.sort()
.
- 当复杂度
A.sort()
是O(1)
(很可能不是)时,函数的复杂度是O(n)
(取决于for
循环的内容)。 - 当 的复杂度
A.sort()
是O(n)
(可能是,但通常不是)时,函数的复杂度仍然是O(n)
,因为它会是O(2*n)
。 - 当 的复杂度
A.sort()
为O(n log n)
时,函数的复杂度为,与此相比,O(n log n)
您的循环可以忽略不计。for
您不能因为将代码块隐藏在函数调用后面并假设它是O(1)
因为“它只是一个函数调用”而忽略了代码块的复杂性。您必须计算复杂性,就好像您将在该位置复制并粘贴该函数的代码一样。
推荐阅读
- python - 如何在 Python 中对控制台输出进行空格填充?
- javascript - InnerHTML 没有更新?
- python - 如何获取帐户创建年龄 discord.py
- .htaccess - htaccess / mod_rewrite 命令用于创建硬编码的永久链接
- c# - 在 C# 中编写多线程映射 IEnumerator
- iis - IIS 请求过滤问题
- docker - 在停止的 tomcat docker 容器中调试
- r - 折叠行以删除 NA
- matrix - Gnuplot - 无法正确绘制两个不同大小的矩阵
- html - Using "property" in HTML meta data with kotlin DSL