動態(tài)規(guī)劃1-------“幻聽癥患者”的上臺階

我叫關小破,是一個輕微幻聽癥患者。

今天上午9點15分,收到女友瑾兒發(fā)來的語音,她約我到LTG咖啡館見面,說是要帶我去一家新開的心境診所,名字聽上去很像是看心理或者精神問題的。

女朋友定的這家咖啡館很是難找,問了3個人,才在一個巷子深處找到它。這個巷子很長,很亂,很嘈雜,各式各樣的店鋪很多,沒有一般咖啡館周圍環(huán)境的那種清幽。

電線桿上的電子牌顯示著:LTG咖啡館,左面樓梯直上三樓?,F(xiàn)在是11點44分,離女朋友約定的時間還有16分鐘,我看到了這個樓梯?!拔铱?,好長”,狹長的棕色木質樓梯,意亂情迷的五彩燈光,墻上貼滿了金屬朋克風的裝飾畫,唯一煞風景的就是臺階上貼的租房和各式神醫(yī)小卡片。

樓梯口旁邊有個牌子上用粉筆楷體字寫著:此樓梯一共五十階,為遠離塵世煩惱,臺階稍高,來者量力而行,每次一階或者兩階。我試了試,三階確實有點扯。估計每個來的人都會像我這樣扯一次。就這樣,我有時一階,有時兩階??斓綐翘荼M頭時,從上面走下來一個胡子比頭發(fā)還濃密,帶著黑色圓框眼睛的中年人,這個資源沒得到合理配置的男人突然站住。他真的很客氣,離我還有九個臺階就側身示意我先過,當然我也比較有修養(yǎng),我不禁三步并做兩步,也顧不得當下的扯與不扯。

“不急,小伙子,我來這里很多次了,我每次上臺階都不會和以前走的一樣,另外我怕扯,每次都是一階或者兩階,今天是我最后一次來這里,你能告訴我,我來這里多少次了嗎”。聽到這里,我停了下來倚在墻上,這個中年人慢慢走向我,一股濃濃的酒精味撲面而來。他游離的眼神中帶著滿滿的期許不斷的打量著我,我在腦海中快速總結了一下他心中的疑惑。

“50級臺階的樓梯,從下往上走,每跨一步只能向上1級或者2級臺階,共有多少種走法”

此刻是11點50分,暴力可以解決問題,但是與這個樓梯的獨特氣質不符,主要是10分鐘可能得不出中年男人想要的結果,從而讓一個女人理直氣壯的爆發(fā)。

++++++++正兒八經(jīng)的分割線++++++++
動態(tài)規(guī)劃:大事化小,小事化了。

動態(tài)規(guī)劃是一種解決問題的方法,通過將問題分解為子問題,并總結關系,得到解決問題的思路。

問題分析:逆向思維

令T(50)表示所有的走法。當我站在50級臺階的時候,我要么是從49級臺階走了1階上來的,要么是從48階臺階走了2階上來的。因此T(50)=T(49)+T(48),同理可推得T(49)=T(48)+T(47)、T(49)=T(48)+T(47)……T(3)=T(2)+T(1)、T(2)=2、T(1)=1。這樣就把原來的求T(50)的問題,轉換為求T(49)、T(48)………T(3)這樣的子問題。T(2)=2、T(1)=1稱為這個問題的邊界條件,試想如果沒有邊界條件,就會分解為無限個子問題,因此得不到問題的解。類似T(50)=T(49)+T(48)這樣的表達式稱為這個問題的狀態(tài)轉移方程;50,49……3,2這樣的數(shù)字可以看成問題的狀態(tài)。

Python3實現(xiàn)
#遞歸實現(xiàn)
def Floor_Recursion(number):
    if number==1:#邊界條件
        return 1
    if number==2:#邊界條件
        return 2
    return Floor_Recursion(number-1)+Floor_Recursion(number-2)#狀態(tài)轉移方程

遞歸實現(xiàn)簡單,但是容易造成棧溢出。分析其原因,是因為上面的程序調用了太多重復的結果,因此需要優(yōu)化。一種方法被稱為備忘錄,就是把需要程序用到的結果儲存起來,例如Python的字典存儲。

#備忘錄
def Floor_Memo(number):
    memo={1:1,2:2}#邊界條件
    count=2
    while count<number:
        count+=1
        memo[count]=memo[count-1]+memo[count-2]#狀態(tài)轉移方程
    return memo[number]

還有一種方法稱為動態(tài)規(guī)劃,這需要仔細分析問題的狀態(tài)轉移方程。以本問題為例,每一個狀態(tài)只是和之前的2個狀態(tài)有關。因此實際上只需要存儲2個結果。

#動態(tài)規(guī)劃
def Floor_DP(number):
    if number==1:#邊界條件
        return 1
    if number==2:#邊界條件
        return 2
    result=[1,2]#只存儲前2次結果
    count=2
    while count<number:
        nexta=sum(result)
        result=[result[1],nexta]#等同于狀態(tài)轉移方程
        count+=1
    return result[-1]
print(Floor_DP(50))
#結果:20365011074
++++++++嬉皮笑臉的分割線++++++++

看著屏幕上出現(xiàn)的結果,兩百……,我不由得一怒。這胡瓢瓢是在逗我嗎??磥砦业檬褂帽┝α???諝庵兄皇菑浡木凭?,胡瓢瓢已不見了蹤影。12點00分了,忍著扯痛,趕緊邁上去。

來到了咖啡館的門口,大大的LTG霓虹燈閃爍,布魯斯藍調音樂時隱時現(xiàn),門上掛個牌子寫著:方便人流,只進不出??粗肆鲀勺郑挥傻靡欢哙乱詾榈搅撕谠\所。推開門,里面還真看不出是個咖啡館,沒有多少咖啡的香氣,倒是酒精的氣味更濃烈。

“這是LTG咖啡店嗎”
“是的,先生,請問您需要什么”
“你們這里怎么這么大的酒精味啊”
“哦,先生,咖啡館在里面的,這外面是酒吧,外面消愁,里面尋歡”
“我其實是來消愁的,我可以做里面嗎”
“里面不允許喝酒的,先生”
“我不點酒”
“先生,您需要點點什么”
“這個門寫著只進不出,為什么剛才有個人出去了”
“剛才嗎,那個人是我們老板。先生,請問您需要什么”
“兩杯熱果汁”
“先生,您有現(xiàn)金嗎,34,我們這里的付錢二維碼需要升級,老板暫時不讓用了,因為我們老板是聾啞人,以后每一筆通過二維碼的消費,都會向聾啞人基金會自動捐款?!?br> “先生,您沒事吧”
“哦,哦,我沒事,我有現(xiàn)金,給”

我拿著兩杯果汁,穿過充斥著酒話、沉悶的外屋,進了里屋。里屋很安靜,是很小的一個咖啡館,復古仿歐式的裝潢,還摻雜一些地中海式的裝飾,《Five Hundred Miles》的聲音可以直達人心。我四處張望,尋找我的女朋友。

“破罐子,我在著呢”
我循著聲音向身后望去,女朋友瑾兒正在一個角落里,笑的很開心。
“瑾兒,我好像有些加重了,你說的那個新開的叫什么心境的診所,怎么樣啊”
“什么診所啊,什么怎么樣啊,我沒和你說過啊”
“你今天早上發(fā)語音和我說的啊,你不信自己聽”,我掏出手機,卻不敢摁下那段語音的重放。
“哈哈,傻罐子,我逗你的”

“只有一句話,你不用擔心會是幻聽,那就是我愛你,破罐子。因為你每一次聽到,都是我真實的在說”

“LTG,這個名字什么意思啊,挺有創(chuàng)意的啊,我覺得是三個對老板特別有意義的首寫字母,你說會不會是老板的女朋友的名字縮寫啊”
“我不這么認為,我覺得像是樓梯高的縮寫,哈哈”

未完待續(xù)
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 曾經(jīng)有一份美好的愛情放在我的面前我沒有珍惜。等到失去后才后悔莫及。如果可以再對小李說。毛欣想說。這輩子無緣再牽手。...
    毛欣與小李閱讀 3,360評論 0 13
  • 今日霜降,加衣添被。一場秋雨一層涼,走著走著就到了秋深處。秋雨在夜里潛入夢境,在白天來臨時依然多情。纏綿著秋的味道...
    螃蟹吃蝦米閱讀 1,009評論 0 0
  • (作于2013.2.16) 一葉方舟悠載瘦人; 半澗溪水撩撥情思。 ——【題記】 我若...
    德甜閱讀 349評論 4 9
  • 鹿邑八景,指鹿邑的八處風景名勝,古人用《八景詩》概括,具體指太清宮隱山遺址、太清宮等。 隱隱青山愛戴煙, ...
    蒙主閱讀 1,438評論 0 0

友情鏈接更多精彩內容