當前位置:首頁 » 操作系統 » 證明演算法正確性

證明演算法正確性

發布時間: 2025-08-23 01:14:28

① 請教prim演算法正確性的證明

為了減少不必要的麻煩,可以不妨設圖中所有邊的權重都不同,這樣最小生成樹是唯一的
然後直接用反證法就行了
如果Prim演算法得到G,而最小生成樹是T
設在生成G的過程中第一次產生的不在T中的邊是e,而在G中去掉e得到的兩個連通分支記為V1和V2,那麼e連接了V1和V2

把e加入T之後會出現環,在這個環裡面V1的頂點和V2的頂點至少還被另一條邊f連接(否則T本身就不連通了),由Prim演算法的貪心策略可知e比f權重低,那麼在T裡面把f換成e可得一個總權重更小的生成樹,與T的最小性矛盾

(因為最小生成樹的總權重的邊的權重的連續函數,對於有權重重復出現的情況可以利用連續性取極限,這樣即使最小生成樹不唯一仍然可以保證Prim演算法生成的樹具有最小權重)

② 演算法的正確性證明方法一: 循環不變數

在之前的一篇文章里寫到 演算法的正確性 的概念以及它的作用,下面就來寫寫循環不變數在演算法的正確性證明中的用法。

在使用循環的演算法里,可以通過循環不變數證明其正確性。
所謂循環不變數是指一種在整個循環過程中保持不變的性質,它必須在以下3種情況下均保持不變,且該性質源困在循環終止後能證明演算法的正確性。

接下來就 歸並排序(Merge sort) 中的 merge 函數來說明一下循環不變數

先解釋一下這個函數的作用,sld 和 srd 為已排序數組,大小分別為 lc 和 rc,循環 tc (lc + rc) 次把它們的元素進行比較並復制到新分配的數組 md 中,那要怎麼證明這個演算法的正確性呢。

讓我們先設定循環不變數,然後看8-18行的循環能否在以上3種情況都滿足這個循環不變數。

結束時循環不變數給了我們一個有用信息,此遲氏時 md 已經把 sld 和 srd 中全部元素合並排序了, 從雹旦念而證明了演算法的正確性。

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:585
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:881
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:574
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:761
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:677
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1005
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:249
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:108
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:799
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:705