演算法導論22 2 7

2022-02-05 04:17:32 字數 575 閱讀 7350

從任意起點開始,執行一次bfs,得到乙個最遠點d1,d1即為直徑的一點

再執行一次bfs,得到乙個最遠點d2,則d1~d2為樹的直徑

為什麼這樣是對的?

(1)證明d1是樹直徑的一點

a) 若s在直徑d1,d2上,則最後乙個點必能搜到d1或d2;因為若搜到最後乙個點為v,則直徑為vd2,與題意不符

b) 若s不在直徑d1,d2上,bfs搜到的最遠點為v,d1-d2為直徑,根據連通圖的性質,

路徑s-v當中必有一點t1,與路徑d1-d2相連

.根據d1-d2直徑定義 d1d2=d2t2+t2d1,且t2d1>=t2t1+t1v,否則直徑為d2-t2-t1-v

根據v是bfs搜到的最遠點,t1v>=t1t2+t2d1,最遠點為d1

根據兩個不等式可得

t1t2=0

t1v=t2d1

(2)通過d1進行bfs,最後搜到的點必為d2

因為若搜到最後乙個點為v,則直徑為vd1,與題意不符

**:

演算法導論 22 2 7 樹的直徑

22.2 7 很顯然數的直徑就是樹的最長簡單路。先進行一次bfs 然後再從 bfs的終點再進行一次 bfs得到的最長路徑就是直徑。進行了兩次 bfs,所以複雜度還 o e v 參考自 樹的直徑是指樹的最長簡單路。求法 兩遍bfs 先任選乙個起點bfs找到最長路的終點,再從終點進行bfs,則第二次bf...

演算法導論 22 2 7 樹的直徑

樹t v,e 的直徑 diameter 定義為max u,v 亦即,樹的直徑是樹中所有最短路徑長度中的最大值。試寫出計算樹的直徑的有效演算法,並分析演算法的執行時間。step1 以樹中任意乙個結點為源點,進行一次廣度優先遍歷,找出離源點距離最遠的點d step2 以d為源點,進行一次廣度優先遍歷,找...

兩次BFS求樹的直徑 演算法導論22 2 7

以任意點w開始,先做一次bfs,找到最遠的點v,然後再以此點v進行一次bfs,找到最遠的點為u,u到v就是樹的直徑。此問題的關鍵不是在程式設計,而是要證明,網上也找了很多資料,沒有看到證明,以下是個人的證明方法。首先要知道樹是沒有環路的連通圖,任意兩點都有一條通路,而且也只有一條通路。同時假設樹的一...