給定一棵樹的每個葉子節點到其他葉子節點的最短距離,求這棵樹上所有邊的距離和。用葉子節點表示某乙個物種,葉子節點之間的距離表示某一物種和另一物種之間差異,用樹來描述是因為用樹來描述滿足物種差異性的三角關係m(i,k)+m(k,j)>=m(i,j)。這種樹可能就叫做進化樹吧,那麼樹上所有邊的距離和就應該表示整個生物界物種多樣性的程度了。
回歸到正題:給定一棵樹的每個葉子節點到其他葉子節點的最短距離,求這棵樹上所有邊的距離和。首先考慮一下簡單的情況,假設只有兩個節點,那麼樹的距離和就是這兩個節點的最短距離。如果存在三個節點呢?其中乙個節點一定通過若干內節點(三個節點時最多兩個)與其他兩個節點相連,也就是說從這個節點有兩條路徑分別連線到其他兩個節點,這兩條路徑的距離是已知的且兩條路徑都通過這個節點與最近的那個內節點之間的邊。如果把這個邊去掉就成了兩個節點的情況了,而這種情況是可計算的,這樣就降低了問題的規模。剩下的問題是如何計算這個節點與最近的那個內節點之間的邊。設x,y,z分別為三個節點,那麼x到最近內節點的距離就是/2。
考慮多餘三個節點的情況,可以通過去掉邊的方式縮小問題規模,但是每次要保證去掉的是節點到最近內節點的邊,那麼可以通過列舉y和z來找到最小值,這樣是o(n^2)的,加上去掉o(n)條邊一共是o(n^3),但是畫乙個複雜的樹嘗試一下就發現固定乙個葉子y,列舉z就可以找到節點x到最近內節點的邊,至於為什麼沒多想,這樣就可以使問題降到o(n^2)。
基於遺傳距離的方法構建系統進化樹
一 基於snps和indels估計遺傳距離 plink file distance matrix recode out distance.out 生成兩個檔案 二 接下來基於遺傳距離矩陣構建系統進化樹軟體使用 lustre softs phylip neighbor 鄰接法 輸入mdist檔案,生成...
ACM I Hate It(線段樹的進化版)
description 很多學校流行一種比較的習慣。老師們很喜歡詢問,從某某到某某當中,分數最高的是多少。這讓很多學生很反感。不管你喜不喜歡,現在需要你做的是,就是按照老師的要求,寫乙個程式,模擬老師的詢問。當然,老師有時候需要更新某位同學的成績。input 本題目包含多組測試,請處理到檔案結束。在...
演算法進化歷程之「水壺問題」
演算法進化歷程之 水壺問題 問題描述 假設給定了n個紅色的水壺和n個藍色的水壺,它們的形狀和尺寸都不相同。所有紅色水壺中所盛水的量都不一樣,藍色水壺也是一樣。此外,對於每個紅色的水壺,都有乙個對應的藍色水壺,兩者所盛的水量是一樣的。反之亦然。你的任務是將所盛水量一樣的紅色水壺和藍色水壺找出來。為了達...