Find() 函数的复杂性是什么?
What is the Complexity of Find() Function
我有两个版本的查找函数,它们都在数组中搜索整数值并返回其位置(如果存在)。函数find1()
在最坏的情况下将搜索多达 N 个元素find2()
在最坏的情况下将搜索多达N/2个元素。这是否意味着find2()
函数复杂度降低到O(N/2)?
我假设数组arr
包含非重复值。
函数: 查找1()
int find1(int value){
for (int i = 0; i < N; i++){
if (arr[i] == value){
return i;
}
}
return -1;
}
函数: 查找2()
int find2(int value){
for (int i = 0, j = N - 1; i <= j; i++, j--){
if (arr[i] == value){
return i;
}
if (arr[j] == value){
return j;
}
}
return -1;
}
首先,第一个版本在最坏的情况下进行了n次迭代,并且在每次迭代中执行恒定数量的操作。第二个版本在最坏的情况下进行了n/2次迭代,并且在每次迭代中,也执行常数恒定的操作,但常量更大。因此,没有理由认为第一个是O(n),第二个是O(n/2)。
在任何情况下,O(n) = O(n/2)。根据 O 的定义,O(n)意味着存在一个常数 c 1,使得对于每 n> n1,
f(n)
类似地,O(n/2)表示存在一个常数c2,使得对于每 n> n2,
f(n)= (c 2/2) n.由于对于任何 n> max(n 1, n 2),不等式在 c1= c 2/2时成立,因此这两者中的每一个都意味着另一个。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- C++避免重复声明的语法是什么
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- C++从另一个类访问公共静态向量的正确方法是什么
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 这个递归函数有什么作用?运行时的复杂性是多少?
- 学习时空复杂性时语句XYZ的含义是什么?
- Find() 函数的复杂性是什么?
- 从n的角度来看,该算法的复杂性是什么
- 函数不受主内存约束的函数所需的复杂性是什么?
- 该功能检测循环链接列表的时间复杂性是什么?
- 以下代码的复杂性是什么?
- std::string::substr成员函数的复杂性是什么?
- 该代码的复杂性是什么
- C++set_intersection的复杂性是什么
- 在 LLVM libc++ 中找到的 string::find 中实现的算法(及其复杂性)是什么?
- 友好数字:运行时间太长.是什么导致的呢?算法的复杂性
- 此代码的复杂性是什么?我们是否应该总结复杂性
- 如何使用CUDA实现2-for粒子交互循环,以及由此产生的复杂性是什么