老师您好,我百思不得其解!
我认为:
就算 j>i 如果要遍历data[i]的话 也一定要先遍历完data[j]
这样一来的话 应该总次数T:(n-1) * n
我认为还是n²
学生才疏学浅,实在想不通老师说的“如果是data[1] data[3]就不存在data[3]data[1]”这句话
希望老师能指点迷津!
162
收起
正在回答 回答被采纳积分+1
3回答
Mr_Raymond
2020-08-13 15:57:58
老师的前提是(data[ i ],data[ j ]) 和(data[ j ],data[ i ]) 这俩玩意是同一个 也就是如果(data[1],data[3])有了, 不再去匹配(data[3],data[1]) 所以j循环内没有必要再去查比 j 小的 i ,那么循环的实际次数就是 (n-1) + (n-2) + ... +1 = n(n-1)/2 等差数列求和 而不是 (n-1) + (n-1) + .....+(n-1) = n(n-1)
liuyubobobo
2020-08-06 03:05:35
假设 n = 5, n * (n - 1) 的意思就是,外循环一共 5 轮(n),每轮循环都要遍历 4 个元素(n - 1)。
但实际上是,
第一轮循环,i = 0,j 需要遍历 1, 2, 3, 4,共 4 个元素;
第二轮循环,i = 1,j 需要遍历 2, 3, 4,共 3 个元素;
第三轮循环,i = 2,j 需要遍历 3, 4,共 2 个元素;
第四轮循环,i = 3,j 需要遍历 4,共 1 个元素;
第五轮循环,i = 4,j 没有元素可以遍历;
每轮循环遍历的元素个数是不同的,不是固定的 n - 1
继续加油!:)
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星