老师您好,我百思不得其解!

老师您好,我百思不得其解!

http://img1.sycdn.imooc.com//climg/5f2aa37409c46f1919201040.jpg我认为:

就算 j>i   如果要遍历data[i]的话 也一定要先遍历完data[j]

这样一来的话 应该总次数T:(n-1) * n  

我认为还是n²

学生才疏学浅,实在想不通老师说的“如果是data[1] data[3]就不存在data[3]data[1]”这句话

希望老师能指点迷津!

正在回答 回答被采纳积分+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


继续加油!:)

  • KAGITO #1

    请问老师n * (n - 1)复杂度为啥不是log(n^2+n)

    2021-01-04 19:04:11
  • liuyubobobo 回复 KAGITO #2

    哪里来的 log?

    2021-01-04 19:06:05
  • KAGITO 回复 liuyubobobo #3

    手误了,O(n^2+n)?

    2021-01-04 19:18:51
提问者 DeathHunk 2020-08-05 20:23:44

就是我实在想不通那个1/2 n² 是怎么得到的!

  • 1/2 n^2 的复杂度还是n^2 没毛病的
    2020-08-12 21:11:47
  • n + ... + 3 + 2 + 1 等差数列
    2020-08-22 21:35:42
  • 查一查等差数列求和公式?

    2021-01-04 19:12:13
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
算法与数据结构
  • 参与学习       2583    人
  • 解答问题       1082    个

慕课网算法名师Liuyubobobo,5年集大成之作 从0到工作5年,算法与数据结构系统解决方案

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师