Algorithm 检查阵列是否有重复的、原始的进近时间分析

Algorithm 检查阵列是否有重复的、原始的进近时间分析,algorithm,data-structures,big-o,Algorithm,Data Structures,Big O,在我的教科书中,我们有一个算法,可以检查数组中是否存在重复项,一旦找到数组中的重复项,该方法就结束了(这是一种幼稚的方法) 我被要求在最坏的情况下找出最大的复杂性 在这种示例中,最坏的情况是,当我们要查找的重复项最终并排出现,或者数组中没有重复项时 我对每一行的运行时间比较困惑 例如,在我发布的代码中,如果我们有9个输入,第一个For循环将运行(n-1)次 在最坏的情况下,第二个for循环将运行多少次(以n为单位)?在这种情况下,它将检查36次 我知道在大O复杂性中最坏的情况是(n^2)。 我知

在我的教科书中,我们有一个算法,可以检查数组中是否存在重复项,一旦找到数组中的重复项,该方法就结束了(这是一种幼稚的方法)

我被要求在最坏的情况下找出最大的复杂性

在这种示例中,最坏的情况是,当我们要查找的重复项最终并排出现,或者数组中没有重复项时

我对每一行的运行时间比较困惑

例如,在我发布的代码中,如果我们有9个输入,第一个For循环将运行(n-1)次

在最坏的情况下,第二个for循环将运行多少次(以n为单位)?在这种情况下,它将检查36次

我知道在大O复杂性中最坏的情况是(n^2)。 我知道大O意味着f(n)必须至多达到g(n)

公共类test2{
公共静态void main(字符串[]args){
int[]arrayint=新的int[]{5,2,3,7,1,9,6,4};
对于(int i=0;i
我知道在大O复杂性中最坏的情况是(n^2)。我知道
大O表示f(n)必须最多达到(=)g(n)

实际上,对于某些常数
c1
,大O意味着
f(n)
(对于足够大的输入)不能达到
c1*g(n)

类似地,对于大Ω(Ω),f(n)必须高于
c2*g(n)
(同样,对于足够大的输入)

这意味着,对于大O和大ω(Ω),使用相同的
g(n)
是可以的,因为您可以有:

c2 * g(n) <= f(n) <= c1 * g(n)

c2*g(n)当
i=0
时,
j
将从
1
变化到
8
。内部循环执行8次

i=1
时,内部循环执行7次(j=2到8)

通常,当
i=x
时,内部循环执行
n-i-1

如果对所有迭代进行求和,则得到
(n*(n-1))/2次迭代。因此,对于9项,这是
(9*(9-1))/2次,或36次