java - 计算函数调用中的基本操作
问题描述
我得到了一个简单的伪代码,并告诉我通过计算函数 myMethod() 执行的大致操作数来确定函数 myMethod() 的大 O 运行时间。我不确定的是,在函数 myMethod() 的 while 循环中,有一个对 doIt() 的函数调用,其中还有另一个 while 循环。我知道我需要在 doIt() 中包含这些操作,但是我不确定它是否应该算作 n 或 n^2,因为它是一个单独的函数,尽管它是 while 循环中的一个 while 循环。
我已经写了我认为每行除了各自行之外的基本操作的数量,我希望能得到一些关于这个问题的指导,因为我在互联网上环顾四周,但在这个特定问题上运气不佳。
static int doIt(int n)
{
count = 0 //1
j=1 //1
while j < n //n x n
{
count = count +1 //n x n
j=j+2 //n x n
}
return count //1
}
static int myMethod (int n)
{
i = 1 //1
while(i<n) //log n
{
dolt(i) //log n
i = ix2 //log n
}
return 1; //1
}
解决方案
首先,您的doIt
函数是一个基本的 while 循环。我不知道n*n
应该是什么意思,但那个循环不是O(n^2)
,O(N)
因为它执行时间——我们n/2
可以写成具有 Big-O 复杂度1/2 * n
doIt
O(N)
您正确地将myMethod
' 的循环确定为log(N)
时间。由于doIt
函数及时运行O(N)
- 的整体复杂度myMethod
是log(N)
外循环的复杂度乘以的复杂度doIt
- 所以log(N) * N
等于O(nlog(n))
推荐阅读
- php - 删除 jQuery 完整日历事件的验证问题
- javascript - 从接口导出枚举
- javascript - XMLHttpRequest() POST 请求中存储的数据在哪里?在 Node.js 服务器端阅读?
- javascript - mac中的extraResources在哪里?
- typescript - typescript redux:如何使用 typesafe-actions 减少样板文件
- c# - IQueryable 不包含 SingleOrDefault 的定义
- java - 如何使控制器方法对 Spring 中的十六进制数字敏感?
- css - 将通过javascript附加的图像居中的最佳方法是什么?
- javascript - 使用 javascript 执行时出现问题并提示
- node.js - Angular 导入节点包