Find() 函数的复杂性是什么?

What is the Complexity of Find() Function

本文关键字:复杂性 是什么 函数 Find      更新时间:2023-10-16

我有两个版本的查找函数,它们都在数组中搜索整数值并返回其位置(如果存在)。函数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)1n.

类似地,O(n/2)表示存在一个常数c2,使得对于每 n> n2

f(n)= (c 2/2) n.

由于对于任何 n> max(n 1, n 2),不等式在 c1= c 2/2时成立,因此这两者中的每一个都意味着另一个。