最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

最快砍“九頭蛇數(shù)”問題的解答

2021-01-11 07:55 作者:大老李聊數(shù)學(xué)  | 我要投稿

不久前我發(fā)布了一個問題征答:在這個砍九頭蛇的游戲中,以最快的方法去砍,最終砍掉四層節(jié)點的九頭蛇需要多少步?即optimal_hydra(4)等于幾?很快我收到了3份解答,所有解答者都給出了optimal_hydra(4)的確切數(shù)字,它是一個有13598位的巨大數(shù)字:

%20optimal%5C_hydra(4)?%3D26558659868036......728397239898221%20%5Capprox2.656%5Ctimes10%5E%7B13597%7D?

這三位給出解答的讀者分別是(按來信先后):Salviatia, Kano,思銘寶寶。Salviatia說已經(jīng)有我的書了,所以恭喜Kano得獎了。也同時贊一下三位的解答和思考能力。以下我借用一下“思銘寶寶”的解題思路,因其思路最簡潔。另外Kano還給出了其對這個砍九頭蛇游戲最佳和最差步數(shù)的分析,稍后我會轉(zhuǎn)載出來?!八笺憣殞殹苯o我的電郵里是這樣寫的(略修改):


我運用了大老李給出的貪心算法,先去最深的括號,深度相同時先去兄弟多的括號。
首先定義一個函數(shù)step(k,n,m)
表示已經(jīng)進行了k步。形成如下的括號串:

(%5C%20%5Coverbrace%7B(%5C%20%5Cunderbrace%7B()().....()%7D_%7Bn%E4%B8%AA%7D%5C%20)......(%5C%20%5Cunderbrace%7B()().....()%7D_%7Bn%E4%B8%AA%7D%5C%20)%7D%5E%7Bm%E4%B8%AA%7D%5C%20)

如此進行(到)step(k,n,m)步(包括開始的k步),使得括號串變?yōu)椤?)”。(大老李注:本解釋中的“步數(shù)”都是計數(shù)的含義,即“運行到某某步”,而不是“再運行xx步”的意思)

那么面對這樣的括號串應(yīng)當(dāng)如何去括號呢?首先進行m步,這樣使m個子括號串變?yōu)?br>
(%5C%20%5Coverbrace%7B()()......()%7D%5E%7Bn-1%E4%B8%AA%7D%5C%20)

那么一共增加了多少子串呢?則為:

(k%2B1)%2B(k%2B2)%2B...%2B(k%2Bm)%3D%5Cfrac%7B1%7D%7B2%7D(2k%2Bm%2B1)m

算上原先的m個,則為:

%5Cfrac%7B1%7D%7B2%7D(2k%2Bm%2B3)m
于是就有了轉(zhuǎn)移方程:

step(k%2Cn%2Cm)%3Dstep(k%2Bm%2C%20n-1%2C%5Cfrac%7B1%7D%7B2%7D(2k%2Bm%2B3)m)
但當(dāng)n=0時,其總步數(shù)就為k+m,Python代碼如下( https://code.sololearn.com/cA10A1A18A7a , 直接看運行結(jié)果):


下面我模擬一下五重括號的過程:



到第五步,其內(nèi)層一共有15個括號,對應(yīng):

k=5 n=15 m=1

所以答案呼之欲出:

optimal_hydra(4)=step(5,15,1)

....

當(dāng)然,我感覺也可用類似的方法寫出optimal_hydra(n)的遞推公式。


所以,根據(jù)以上,只要5行代碼,就可以算出optimal_hydra(4)的確切值,且一瞬間就可以執(zhí)行完成!但是問題沒完,我們很想寫出能計算一般的optimal_hydra(n)的程序。

借用“思銘寶寶”的思路,大老李做了如下分析,考慮在“去括號游戲”中的這種形態(tài):所有最內(nèi)層括號都在同一層且互為“兄弟”,外圍有i重括號,兄弟一共m個,此時進行到第s步:

第s步: %5Cunderbrace%7B(...(%7D_%7Bi%E5%B1%82%7D%5C%20%5Coverbrace%7B()()...()%7D%5E%7Bm%E4%B8%AA%7D%5C%20)%20...)

下一步會變?yōu)椋?br>
第s+1步:? %5Cunderbrace%7B(...(%7D_%7Bi-1%E5%B1%82%7D%5C%20%5Cunderbrace%7B(%5C%20%5Coverbrace%7B()()...()%7D%5E%7Bm-1%E4%B8%AA%7D%5C%20)...(%5C%20%5Coverbrace%7B()()...()%7D%5E%7Bm-1%E4%B8%AA%7D%5C%20%7D_%7Bs%2B1%E4%B8%AA%7D%20)%20%5C%20)...)

又經(jīng)過若干步,遲早會變?yōu)椋?br>
第s+x步:?? %5Cunderbrace%7B(...(%7D_%7Bi-1%E5%B1%82%7D%5C%20%5Coverbrace%7B()()...()%7D%5E%7By%E4%B8%AA%7D%5C%20)%20...)

其中的x, y是可以由初始的i, m, s唯一確定計算出的。分析出x, y與i, m, s的關(guān)系后,就可以寫出一般的計算optimal_hydra(n)的[程序](https://code.sololearn.com/ca23a121a19A):



當(dāng)然,由于函數(shù)值增長的過快,程序無法計算出optimal_hydra(5)的結(jié)果。如果用Oh(5)和Oh(4)分別表示optimal_hydra(5)和optimal_hydra(4), 大老李初步分析:

Oh(5)%20%5Capprox%20(Oh(4))%5E%7B2%5E%7BOh(4)%7D%7D%5Capprox%2010%5E%7B10%5E%7B10%5E%7B13597%7D%7D%7D

也歡迎你發(fā)給我你對hydra(n)的大小估計。這是一次非常有意義的編程經(jīng)歷,大老李寫出了一個平生最“喪心病狂”的,但可以計算出確切值的和有意義的大數(shù)函數(shù)!


最快砍“九頭蛇數(shù)”問題的解答的評論 (共 條)

分享到微博請遵守國家法律
晋城| 子洲县| 汨罗市| 突泉县| 大冶市| 遂宁市| 上饶市| 宁化县| 南充市| 张家港市| 诸城市| 田东县| 信丰县| 文登市| 九台市| 抚顺市| 萝北县| 淮安市| 宝山区| 集安市| 门头沟区| 读书| 岚皋县| 昆山市| 星子县| 阜阳市| 大宁县| 榆社县| 山阳县| 台东县| 乌恰县| 桃江县| 凤翔县| 永清县| 平定县| 眉山市| 礼泉县| 永兴县| 梓潼县| 七台河市| 洛隆县|