c++ - Find() 函数的复杂度是多少

标签 c++ algorithm search time-complexity asymptotic-complexity

<分区>

我有两个版本的 find 函数,它们都在数组中搜索整数值并返回它的位置(如果存在)。函数 find1() 将在最坏情况下搜索多达 N 个元素,另一方面 find2() 函数将搜索多达 N/2 最坏情况下的元素。这是否意味着 find2() 函数的复杂度降低到 O(N/2)

我假设数组 arr 包含非重复值。

函数:find1()

int find1(int value){
    for (int i = 0; i < N; i++){
        if (arr[i] == value){
            return i;
        }
    }
    return -1;
}

函数:find2()

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)。通过 definition of O , O(n) 表示存在一个常量 c1 使得对于每个 n > n1

f(n) < c1 n

类似地,O(n/2) 意味着存在一个常数 c2 使得对于每个 n > n 2,

f(n) < c2 n/2 = (c2/2) n

因为对于任何 n > max(n1, n2) 不等式对 c1 = c2/2,这两个中的每一个都暗示着另一个。

关于c++ - Find() 函数的复杂度是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44449632/

相关文章:

javascript - 使用英语分析器在 ElasticSearch 中搜索短语

c++ - Visual Studio 2012 不存在 mfplatf.lib

python - 如何在 C/C++ 中调用 Python 函数的简单示例

c++ - 将返回的指针分配给另一个返回的指针?

algorithm - 针对对称邻接矩阵优化 Floyd-Warshall

algorithm - 为 Dijkstra 算法构建测试图的策略?

algorithm - 找到存在的最大条目数的值

c++ - 将变量的名称传递给 C++ 中的函数

algorithm - 使用 OCaml 中的列表找到下一个最大的数字

java - 有效地搜索二维矩阵的多个项目