以下程序的时间复杂度

时间:2019-02-16 09:14:50

标签: java c++ algorithm time-complexity

因此,基本上我想在第二个数组中查找所有小于或等于第一个数组的元素。两个数组都已排序。我知道解决办法。我不要 我只想知道该程序的时间复杂度以及我们将如何计算它。预先谢谢你。

int count=0;
        for(int i=0;i<n;i++)
            {
            for(int j=count;j<m;j++)
                {
                if(arr[i]>=arr[j])
                    //some O(1) code
                else
                    {
                    count=j;
                    break;
                    }
                }
            }

4 个答案:

答案 0 :(得分:3)

复杂度将为 O(n * m),因为每个n值的外部循环将运行m次。

答案 1 :(得分:2)

在您的代码中只有一个数组。与您的解释相反,其中有两个数组。

假设有一个错字,并且应该有第二个数组:

最差:您可以在O(n * m)处确定上限。如果第二个元素都比第一个元素小,就会发生。

最佳:您可以在O(n)处确定下限。 如果第二个元素的所有元素都大于第一个元素,则发生(第一个元素破坏了循环)。

平均值:如果假设分布均匀,则平均值为O(n * m / 2)。

结论是O(n²)联赛算法。

仅一个数组:

但是,如果我采用“按原样”的代码-只有一个数组,并且还要考虑到它的排序方式:

如果i i的内部循环。 ->内部循环将在j == i处停止; ->上限为O(n * m / 2)。仍然是O(n²)联赛。

撤销订单

所以arr [i] j成立:

它将跳过j

但是我想这是一个错别字,您提到了两个数组,所以我跳过了用重复项排序的情况(再次是O(n * m),例如,如果所有元素都相同)。

答案 2 :(得分:1)

O(n * m)-因为要遍历'n'个外部元素 对于每个外部元素,您都有一个包含m个元素的内部循环。 For循环的时间复杂度-O(n)。基本上,for循环将运行多少次。

答案 3 :(得分:0)

复杂度: O(m * n)
由于其中涉及两个for循环,因此在不同情况下可能有所不同,但是如果两个都执行,则必须为O(m*n)