首页 > 技术文章 > 倍增

hbxblog 2018-10-25 19:54 原文

倍增是一个运用广泛的算法,他博大精深

什么是倍增

倍增,意思是成倍的增加增长,成倍地增长
这是废话,没什么用,但是这对于之后的学习还是有点启发作用的

前序

现在假设你在A点,你需要前往B点去见你的妹子

你需要尽快的时间到达B点,以求跟妹子待得时间更长,于是你求教了一些人

A:泡什么妹子,还不如回家打摆(搞颓),88不理你了,回家打游戏去
B:泡妹子要有恒心,要一步一个脚印,踏踏实实,所以要一步一步的走,总会走到
C:既然要快,直接"飞"到B啊,管那么多干什么?泡妹子要快,下手要早,那么啰嗦干什么?你只要在之前踩点就好了,这样子你就可以在妹子需要你的时候第一时间到达目的地(例如"一个省会"就是这么做的)

dalao:前面都是假的,不要信这些人的,这都是错的,我来举一些反例
        A:你这样子泡不到妹子
        B:如果妹子距离你很远的话,要么是你累死在路上了,要么是妹子等的不耐烦了,走了,不管怎么样你都泡不到妹子
        c:如果你喜欢的妹子多怎么办?还踩点,脑子够用吗,记不住啊?

所以啊,还是要听我的。

你只需要会倍增,你就可以事倍工log。所以啊还是要学倍增

倍增算法

现在来正式讲一讲倍增。
假如你在A点,你只需要踩点是记录下2^n就好了,这样子你就可以很快的到达目的地了,那么应该怎么跳呢?
当然是从大往小跳啊,如果能跳就跳,不能跳就不跳
       eg:
              假设A到B的长度是26;
              首先你先处理最长的要跳多少步,现在假设最长要跳32步,于是我们从32开始枚举

枚举到要跳多少步 能否跳 跳完剩余几步
32 NO 26
16 YES 10
8 YES 2
4 NO 2
2 YES 0
0 YES 0
好了,这就结束了,我们发现我们只需要枚举6次,而暴力跳却需要26次,所以这个算法的效率十分的高

       ps:
              1. 为什么不可以从小往大枚举呢?
              我们来看看一个例子如:5,5=4+1,而从小往大枚举的话会多出一个2,这是还需要回溯,十分麻烦,而从大往小枚举就避免了这种情况。
2. 为什么不可以重复选呢?因为如果你可以重复选的话,你为什么不选这个数的两倍呢?
好了,这个算法就讲到这里了,接下来是后续

后续

所以说学好算法对泡妹子也是很有帮助的

推荐阅读