倍增
倍增是一個(gè)運(yùn)用廣泛的算法,他博大精深
什么是倍增
倍增,意思是成倍的增加增長(zhǎng),成倍地增長(zhǎng)
這是廢話,沒(méi)什么用,但是這對(duì)于之后的學(xué)習(xí)還是有點(diǎn)啟發(fā)作用的
前序
現(xiàn)在假設(shè)你在A點(diǎn),你需要前往B點(diǎn)去見(jiàn)你的妹子
你需要盡快的時(shí)間到達(dá)B點(diǎn),以求跟妹子待得時(shí)間更長(zhǎng),于是你求教了一些人
A:泡什么妹子,還不如回家打擺(搞頹),88不理你了,回家打游戲去
B:泡妹子要有恒心,要一步一個(gè)腳印,踏踏實(shí)實(shí),所以要一步一步的走,總會(huì)走到
C:既然要快,直接"飛"到B啊,管那么多干什么?泡妹子要快,下手要早,那么啰嗦干什么?你只要在之前踩點(diǎn)就好了,這樣子你就可以在妹子需要你的時(shí)候第一時(shí)間到達(dá)目的地(例如"一個(gè)省會(huì)"就是這么做的)
dalao:前面都是假的,不要信這些人的,這都是錯(cuò)的,我來(lái)舉一些反例
? ? ? ? A:你這樣子泡不到妹子的
? ? ? ? B:如果妹子距離你很遠(yuǎn)的話,要么是你累死在路上了,要么是妹子等的不耐煩了,走了,不管怎么樣你都泡不到妹子
? ? ? ? c:如果你喜歡的妹子多怎么辦?還踩點(diǎn),腦子夠用嗎,記不住啊?
所以啊,還是要聽(tīng)我的。
你只需要會(huì)倍增,你就可以事倍工log。所以啊還是要學(xué)倍增
倍增算法
現(xiàn)在來(lái)正式講一講倍增。
假如你在A點(diǎn),你只需要踩點(diǎn)是記錄下2^n就好了,這樣子你就可以很快的到達(dá)目的地了,那么應(yīng)該怎么跳呢?
當(dāng)然是從大往小跳啊,如果能跳就跳,不能跳就不跳
? ? ? ?eg:
? ? ? ?? ? ? ?假設(shè)A到B的長(zhǎng)度是26;
? ? ? ?? ? ? ?首先你先處理最長(zhǎng)的要跳多少步,現(xiàn)在假設(shè)最長(zhǎng)要跳32步,于是我們從32開(kāi)始枚舉
| 32 | NO | 26 |
| 16 | YES | 10 |
| 8 | YES | 2 |
| 4 | NO | 2 |
| 2 | YES | 0 |
| 0 | YES | 0 |
好了,這就結(jié)束了,我們發(fā)現(xiàn)我們只需要枚舉6次,而暴力跳卻需要26次,所以這個(gè)算法的效率十分的高
? ? ? ?ps:
? ? ? ?? ? ? ?1. 為什么不可以從小往大枚舉呢?
? ? ? ?? ? ? ?我們來(lái)看看一個(gè)例子如:5,5=4+1,而從小往大枚舉的話會(huì)多出一個(gè)2,這是還需要回溯,十分麻煩,而從大往小枚舉就避免了這種情況。
2. 為什么不可以重復(fù)選呢?因?yàn)槿绻憧梢灾貜?fù)選的話,你為什么不選這個(gè)數(shù)的兩倍呢?
好了,這個(gè)算法就講到這里了,接下來(lái)是后續(xù)
后續(xù)
所以說(shuō)學(xué)好算法對(duì)泡妹子也是很有幫助的
轉(zhuǎn)載于:https://www.cnblogs.com/hbxblog/p/9852387.html
總結(jié)
- 上一篇: Jmeter当获取正则表达式匹配数字为负
- 下一篇: P4728 [HNOI2009]双递增序