time-complexity - 循环中带有函数*函数的函数的时间复杂度
问题描述
你能帮我找出以下函数的复杂性吗:
proc (int n)
{
for (i=0 ; i<n ; i++)
{
x = g(n)+f(n) ;
for (j=0 ; j<n ; j++)
{
y=h(j)*g(j) ;
}
}
return x+y ;
}
f = O(n^2),g = O(n),h = Θ(log(n))。
我不确定的事情:
- 对于我 n*log(n),“y = h(j) * g(j)”的复杂度是多少?
- 如果在循环中是“y = h(j) * g(j)”还是只是“h(j) * g(j)”,复杂性是否存在差异?
- 是不是“x = g(n) + f(n)”的复杂度是n + n^2?
谢谢!
解决方案
内循环的复杂度(总和h*g
)
由于h(j) = Θ(log(j))
和g(j) = O(j)
的复杂度h(j).g(j)
为O(j.log(j))
,即<= K.j.log(j)
K > 0。因此内循环产生
K.(1.log(1) + 2.log(2) + ... + (n-1).log(n-1))
<= K'.n^2.log(n)
对于一个精心选择的常数K'
,内循环给出了一个复杂性O(n^2.log(n))
。
的复杂度g + f
g = O(n)
,f = O(n^2)
所以的复杂度f + g
是O(n^2)
。
总体复杂性
A:给定n
项O(n^2)
的总和。B:给定的项总和。f+g
O(n^3)
j^2log(j)
0 <= j < n
O(n^3.log(n))
因此,您的方法的复杂性是O(n^3.log(n))
.
推荐阅读
- python - 如何并行读取多个 .xls 文件作为 DataFrames?
- tensorflow - 无法在 google colab 中加载图像以进行对象识别
- android - 如何解决 INSTALL_FAILED_MISSING_SHARED_LIBRARY 以运行 Android Things 应用程序开箱即用?
- sql-server - 改善可怕的 MERGE 性能
- regex - 如何在 RegEx 中对字符串的同一部分使用多个前瞻?
- javascript - 如何从Angular ngFor中的方法中提取值
- java - 是否可以强制 java.sql.Date 仅将年、月、日插入 Oracle 日期列
- ruby-on-rails - ActiveJob + Sidekiq 6.0.3:如何写入日志文件?
- android - 无法安装 Intel x86 Emulator Accelerator(HAXM 安装程序)
- python-3.x - 从python中的列表计算最大时间差