從零開始學建樹 樹的分治,樹的重心

2021-09-07 10:04:29 字數 1171 閱讀 6728

樹的分治演算法是分治思想在樹型結構上的體現。

任乙個具有n個節點的連通路,它的任何一棵樹的樹枝數為n-1

分治:除去樹中的某些物件,使原樹被分解成若干互不相交的部分。

分治演算法分為兩種:一種是點的分治,一種是邊的分治

1.選取乙個點將無根樹轉為有根樹

2.遞迴處理每一顆以根結點的兒子為根的子樹

1.在樹中選取一條邊

2. 將原有的樹分成兩棵不相交的樹,遞迴處理。

可以證明在基於點的分治中,如果每次都選取樹的重心,那麼至多遞迴

o(logn)次。

基於邊的分治最壞情況下遞迴次數為o(n)。

我們選取乙個點,要求將其刪去後,結點最多的樹的結點個數最小,這個點被稱作」樹的重心」

下面給出乙個定理:

存在乙個點使得分出的子樹的結點個數均不大於n/2

證明:(反證法證明)

假設u是樹的重心,記size(x)表示以x為根的子樹的結點個數。記v為u的兒子中size值最大的點。

假設size(v)>n/2,那麼我們考慮v作為根結點的情況,記size』(x)表示此時以x為根的子樹的結點個數。

如圖。對於a部分,顯然size』(ti)對於b部分,size』(u) = n-size(v)這與樹的重心定義矛盾。

定理得證。

//日後將會給出一些例題去運用以上的結論

從零開始學 樹

在之前做二級的題的時候,偶爾會碰見二叉樹,很自然的就想起了樹,那麼什麼是樹呢?這裡說的可不是外面的參天大樹,而是有實際概念的樹,下面就來介紹一下樹。樹是由n n 0 個結點組成的有限集合。若n 0,稱為空樹 若n 0,則 1 有乙個特定的稱為根 root 的結點。它只有直接後繼,但沒有直接前驅 2 ...

樹的直徑 樹的重心與樹的點分治學習筆記

樹的直徑是指樹上的最長簡單路。任選一點w為起點,對樹進行搜尋,找出離w最遠的點u。以u為起點,再進行搜尋,找出離u最遠的點v。則u到v的路徑長度即為樹的直徑。簡單證明 如果w在直徑上,那麼u一定是直徑的乙個端點。反證 若u不是端點,設直徑的兩端為s與t,則dist w,u dist u,t 且dis...

樹的重心 樹的直徑

樹的重心 樹的重心定義為 找到乙個點,其所有的子樹中最大的子樹節點數最少,那麼這個點就是這棵樹的重心,刪去重心後,生成的多棵樹盡可能平衡.實際上樹的重心在樹的點分治中有重要的作用,可以避免n 2的極端複雜度 從退化鏈的一端出發 保證nlogn的複雜度,利用樹型dp可以很好地求樹的重心.求樹的重心 模...