n重循环的优化(二分搜索)

这篇内容不多,质量不大高
循环在针对一些问题时,的确是很快能想到的方法,一般也是比较暴力的一个个的尝试,而这不就是计算机擅长的事吗?

不过有时规模非常大时,计算机也需要一些时间去计算,对于一些密码或者以指数规模增长的问题(或者NP完全问题),只是用循环一个个去试,有时并不一定能得到想要的结果,反而看起来还笨一些
    那么有两种选择:
        一是对现有的循环进行优化,降低它的时间复杂度
        二是不用循环,考虑其他方法,或许其他方法更巧妙,更有效

如何优化一个n重循环?

这个暂时没有太多积累,这要看这n重循环用来干什么,这n重循环是对几个对象进行循环

(一)  n重循环只针对一个对象,要的元素都在该对象中,要的元素彼此间有具体的数学关系
        一次优化:
            如果要拿出n个元素就需要进行n重的循环,
                那么对于其中一个元素n[i],就可以根据其给出的具体的数学关系求出
                    这样少用一个循环,用其他元素求出该元素后在所在对象中使用二分搜索查找
                        【二分搜索的前提是该对象有序排列,这样这一步的时间复杂度就为 O(logn)】
                    剩下的n-1重循环就会因为少了一重循环而少一个数量级
                最终的时间复杂度为O(n^n-1*log(n))
        二次优化:
            再根据上面的方法再来一遍,拿出两个元素
                这样就用n-2重循环,这两个元素可以用其他的元素由具体的数学关系求出
                    对于这两个元素,其间也有相应的数学关系,进行组合后在其对象中搜索
                        其对象也要根据这两个元素的变化做出相应的变化
                            【前提依旧是变化后的对象仍然要有序】
                        这样就剩n-2重循环,又降低了一个数量级
                最终的时间复杂度为 O(n^n-2 * log(n))
    。。。。。

【待续】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值