java - 确定函数的运行时间:
问题描述
public static void p2(int N) {
for (int i = 0; i < N; i += 1) {
for (int j = 1; j < N; j = j * 2) {
System.out.println("hi !");
}
}
}
你能帮我确定这个函数的运行时间吗?
我试图为 N 的不同输入找到一些模式。我计算了最多 5 个输入的成本(为此目的使用了 println):
N:0、1、2、3、4、5
C(N): 0, 0, 2, 6, 8, 15
其中 C(N) 是成本函数。
但是,我不知道下一步该怎么做!答案是 Θ(N log(N))
解决方案
内部循环将执行lg n
时间。您可以通过查看除以N
2 得到 1 的次数来理解这一点?(即内循环要执行多少次?)这个问题的答案是lg n
。外循环将运行N
时间。因此,对于 的每次迭代i
,内部循环将运行lg n
时间。这意味着嵌套循环将准确运行n(lgn)
时间,这是这个问题的时间复杂度。
推荐阅读
- python - 使用 scipy 和 Mathematica 求解多维非线性方程组的策略
- c++ - C++ API 的消费者驱动契约测试
- pyspark - 临时视图和临时视图有什么区别吗?
- python - _tkinter.TclError:未知选项“-d”
- asp.net - ajaxtoolkit:numericupdownextender 增量按钮在按钮单击时不起作用
- scala - Scala Spark RDD Aggregate 行为怪异
- json - 在Angular 6中过滤带有复选框的列表
- python - 从openpyxl中获取一行值的最干净的方法?
- reactjs - mapDispatchToProps 函数中的两个调度调用
- c# - 如何将 Alea GPU 告诉 AOT?