倍增
倍增是一個運用廣泛的算法,他博大精深
什么是倍增
倍增,意思是成倍的增加增長,成倍地增長
這是廢話,沒什么用,但是這對于之后的學習還是有點啟發作用的
前序
現在假設你在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. 為什么不可以重復選呢?因為如果你可以重復選的話,你為什么不選這個數的兩倍呢?
好了,這個算法就講到這里了,接下來是后續
后續
所以說學好算法對泡妹子也是很有幫助的
轉載于:https://www.cnblogs.com/hbxblog/p/9852387.html
總結
- 上一篇: Jmeter当获取正则表达式匹配数字为负
- 下一篇: P4728 [HNOI2009]双递增序