五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

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

【ROSALIND】【練Python,學(xué)生信】67 無(wú)根二叉樹(shù)的數(shù)目

2022-11-21 16:41 作者:未琢  | 我要投稿

如果第一次閱讀本系列文檔請(qǐng)先移步閱讀【ROSALIND】【練Python,學(xué)生信】00 寫(xiě)在前面 ?謝謝配合~

題目:

無(wú)根二叉樹(shù)的數(shù)目(Counting Unrooted Binary Trees)

?

Given: A positive integer n (n≤1000).

所給:一個(gè)不大于1000的整數(shù)n。

Return: The value of b(n) modulo 1,000,000.

需得:b(n)的值,對(duì)1,000,000取模。

?

測(cè)試數(shù)據(jù)

5

測(cè)試輸出

15

?

背景

? ? ? ? 在55 創(chuàng)建字符表中我們知道,從一棵樹(shù)上刪除一條邊,就會(huì)產(chǎn)生兩棵獨(dú)立的樹(shù),每棵樹(shù)都是原始樹(shù)的子集,可以用S∣Sc表示這種樹(shù)的分裂。我們也可以用這種分裂集合來(lái)唯一的表示一棵無(wú)根二叉樹(shù)。

? ? ? ??在本題中,我們想要知道在有n個(gè)葉子結(jié)點(diǎn)的情況下,一共有多少課不同的無(wú)根二叉樹(shù)。為了解決這個(gè)問(wèn)題,我們首先要定義何為“相同”的無(wú)根二叉樹(shù),具有相同分裂的兩棵樹(shù)即為“相同的無(wú)根二叉樹(shù)”,反之,如果兩棵樹(shù)的分裂是不同的,則被認(rèn)為是“不同的無(wú)根二叉樹(shù)”。

? ? ? ??在本題中,我們定義b(n)表示具有n個(gè)葉子結(jié)點(diǎn)的的不同無(wú)根二叉樹(shù)的總數(shù)。

?

思路

? ? ? ??對(duì)于生物專(zhuān)業(yè)的同學(xué),本題題目可能相當(dāng)難懂。總結(jié)來(lái)說(shuō),題目會(huì)給我們?nèi)~子結(jié)點(diǎn)的數(shù)量,我們來(lái)回答具有這些葉子的無(wú)根二叉樹(shù)一共有多少棵。接下來(lái)我們會(huì)將解題步驟分解,并繪圖來(lái)幫助理解。

(1)理解一棵有n個(gè)葉子結(jié)點(diǎn)的無(wú)根二叉樹(shù)肯定有2n-3條邊;

? ? ? ??由無(wú)根二叉樹(shù)的特點(diǎn)可知,一個(gè)結(jié)點(diǎn)要么度為3(內(nèi)結(jié)點(diǎn)),要么度為1(葉子節(jié)點(diǎn))。

有3個(gè)葉子結(jié)點(diǎn)的樹(shù):

有3個(gè)葉子結(jié)點(diǎn)的樹(shù)有3條邊,即2*3-3


? ? ? ??有4個(gè)葉子結(jié)點(diǎn)的樹(shù),其中一種情況為:

有4個(gè)葉子結(jié)點(diǎn)的樹(shù)有5條邊,即2*4-3

? ? ? ??有5個(gè)葉子結(jié)點(diǎn)的樹(shù),其中一種情況為:

有5個(gè)葉子結(jié)點(diǎn)的樹(shù)有7條邊,即2*5-3

? ? ? ??葉子結(jié)點(diǎn)更多的情況也可以以此類(lèi)推,邊滿足2n-3。

(2)?把一個(gè)新結(jié)點(diǎn)通過(guò)一條邊連在現(xiàn)有的邊上,我們就可以得到一棵新的無(wú)根二叉樹(shù);除了這種辦法以外,沒(méi)有其他連接新結(jié)點(diǎn)的方法。

? ? ? ??舉個(gè)例子,我們向有3個(gè)葉子結(jié)點(diǎn)的那棵樹(shù)添加一個(gè)新結(jié)點(diǎn),操作過(guò)程如下:

? ? ? ??畫(huà)圖可知,這是唯一的添加新結(jié)點(diǎn)方法,其他方法無(wú)法滿足無(wú)根二叉樹(shù)的定義。

(3)可能具有n片葉子的樹(shù)的數(shù)量是具有n-1片葉子的樹(shù)的數(shù)量的2(n-1)-3倍;

? ? ? ??在進(jìn)化樹(shù)中,每一片葉子結(jié)點(diǎn)都代表一個(gè)不同的種屬,因此在每個(gè)邊上添加新結(jié)點(diǎn)都會(huì)產(chǎn)生一個(gè)不同的進(jìn)化樹(shù)。由于有n-1個(gè)葉子結(jié)點(diǎn)的樹(shù)有2(n-1)-3條邊,因此每棵樹(shù)添加一個(gè)結(jié)點(diǎn)都可以產(chǎn)生2(n-1)-3個(gè)新的樹(shù),再乘上n-1個(gè)葉子結(jié)點(diǎn)的樹(shù)的數(shù)目,就得到了有n片葉子的樹(shù)的數(shù)量。

? ? ? ??經(jīng)過(guò)以上三步可以看到我們得到了一個(gè)遞歸,有n片葉子的樹(shù)的數(shù)量由有n-1個(gè)葉子結(jié)點(diǎn)的樹(shù)的數(shù)目決定,即b(n)=[2(n-1)-3]*b(n-1)。

? ? ? ??因?yàn)橹挥幸豢糜?片葉子的樹(shù),所以最終的公式為T(mén)(n)=1?3?…(2n?5)=(2n?5)!!

? ? ? ??想明白這個(gè)過(guò)程,代碼就非常簡(jiǎn)單啦,甚至都不需要有注釋~

?

代碼


【ROSALIND】【練Python,學(xué)生信】67 無(wú)根二叉樹(shù)的數(shù)目的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
鄱阳县| 织金县| 波密县| 宁海县| 金湖县| 平阴县| 如东县| 莎车县| 商丘市| 怀化市| 文成县| 皮山县| 琼中| 搜索| 佛教| 嘉禾县| 大田县| 美姑县| 景德镇市| 蓬安县| 中阳县| 亚东县| 临邑县| 英吉沙县| 房产| 咸宁市| 和硕县| 雷波县| 盐津县| 神池县| 广饶县| 岳池县| 都兰县| 东源县| 个旧市| 河东区| 巢湖市| 枝江市| 丰顺县| 安龙县| 谢通门县|