algorithm - 这个大 O 评估是否正确?
问题描述
我无法理解某些东西。我什至不确定它是否正确。
在破解代码面试中,有一个部分要求您确定许多功能的大 O。在大多数情况下,它们是可以预测的。
然而,其中一个让我陷入了困境。
显然,这评估为O(ab)
:
void printUnorderedPairs(int[] arrayA, int[] arrayB) {
for (int i = 0; i < arrayA.length; i++){
for (int j = 0; j < arrayB.length; j++){
for (int k = 0; k < 100000; k++){
System.out.println(arrayA[i] + "," + arrayB[j]);
}
}
}
}
理性地认为
“100,000 个工作单位仍然是恒定的,所以运行时间是O(ab)。
我试图看看为什么这可能有意义,但我还不能;自然,我预料到了O(abc)
。
是的,100,000
是一个常数,arrayA
并且arrayB
是数组,但是我们取的是数组的长度。在运行这些for
循环时,不会array[x].length
是一个常数(假设数组的大小在执行期间不会改变)?
那么,这本书对吗?如果是这样,我真的很感激洞察力和直觉,这样我以后就不会陷入同样的陷阱。
谢谢!
解决方案
作者所说的常量的意思是一个固定的值,无论输入大小如何,与可能改变的输入数组的长度不同。例如,printUnorderedPairs
可能会使用不同的数组作为参数调用 ,而这些数组之间可能具有不同的大小。
推荐阅读
- .net - 如何从 appsettings 为 Blazor 中的授权视图标记或属性动态设置允许的角色或策略?
- mongodb - 通过 $elemMatch 从数组的特定元素中选择特定字段
- coq - ssreflect 反演,我需要两个方程而不是一个
- jupyter-notebook - 未找到 Anaconda + Jupyter 内核
- struct - Solidity:TypeError 无效类型。请求的从类型(字符串存储指针)到字符串内存的无效隐式转换
- postgresql - PostgreSQL 按多个字段过滤,但按单个字段分组
- django - 在 Django 管理仪表板中根据我们的意愿排列模型名称
- optimization - 在循环 GEKKO 中创建变量数组
- javascript - 函数在 app.js 中不起作用,但在 index.html 工作库 reactjs 中不起作用
- sql-server - Need help in Understanding the below Calculation in Excel