代码的时间复杂度是否取决于循环或操作数?

时间:2018-12-25 04:39:06

标签: java algorithm time-complexity

我正在编写一个代码,需要将我的数组元素与另一个数组进行比较。

但是我在想,这将使我的时间复杂度从O(n)增加到O(n ^ 2),因为它已经在第一个数组的for循环内。

所以我在父级for循环(带有参数i)中提出了这样的代码:

int m = 0;
int ele = array2[m];
if(array1[i] == ele)
    count++;
m++;

但是由于要做的事情是相同的,所以只有我发出了for循环,我想知道时间复杂度的确是O(n)或变成O(n ^ 2)。

我还理解这只会比较相同的索引元素,而不是全部。如果有人可以提供更多有关此信息,我将不胜感激。

3 个答案:

答案 0 :(得分:1)

是的,时间复杂度取决于Loop和其中执行的操作数量。

在您的情况下,有一个赋值int ele = array2[m]和一个条件检查if(array1[i] == ele),以及mcount的2个增量。

所有操作将花费固定的时间,并取决于循环执行的时间。

答案 1 :(得分:0)

算法的时间复杂度取决于编写循环的方式以及算法中操作的时间复杂度。

如果您的算法包含任意数量的O(1)运算,则您的算法为O(1)。

如果您的算法由一个或多个从常数到n的循环(未嵌套)组成,则时间复杂度为O(n * the_time_complexity_of_the_operation_in_the_loop)

下面的每条语句都需要O(1)时间:

    <img src= "/images/login2.png">

所以整个都是O(1)。该块位于循环遍历数组的for循环内,因此时间复杂度为O(n * 1)= O(n),其中n是数组的长度。

这是一种直观的方式来思考为什么只比较相同索引的元素时时间复杂度会降低吗?

如果要比较两个数组中的每个可能对,则有几对?第一个数组的第一个元素可以与第二个数组中的n个其他元素形成一对,第一个数组的第二个元素可以与第二个数组中的n个其他元素形成一对,依此类推。通常,对于第一阵列中的每个元素,可以形成n对。假设两个数组的长度相同,则对的总数为n ^ 2。因此,需要进行很多比较,这意味着时间复杂度为O(n ^ 2)。

如果要比较同一索引下的对元素,可以有几对? n对,因为每个索引正好对应于1对。因此,您需要进行n次比较,这意味着时间复杂度为O(n)。

答案 2 :(得分:-1)

在这种情况下,您总是将array[m] (in your case array[0])元素与i^th数组的array1索引进行比较。因此,这实际上与遍历一个数组并计算与给定特定编号匹配的元素的数量

将一个数组与另一个数组进行比较通常需要O(n ^ 2)时间,尽管有一些方法可以减少时间复杂度。一旦这样的解决方案可以是O(n+m) time complexity and O(min(n,m)) space complexity。遍历较小尺寸的数组并将元素存储在一个哈希表中,然后遍历第二个数组以匹配哈希表中的元素。