演算法是為了解決某類問題而規定的乙個有限長的操作序列。處理問題的策略
演算法是求解問題的一系列計算步驟,用來將輸入資料轉換成輸出結果 :
如果乙個演算法對其每乙個輸入例項,都能輸出正確的結果並停止,則稱它是正確的。
演算法與資料結構既有聯絡又有區別。
聯絡:資料結構是演算法設計的基礎。演算法的操作物件是資料結構,在設計演算法時,通常要構建適合這種演算法的資料結構。資料結構設計主要是選擇資料的儲存方式,如確定求解問題中的資料採用陣列儲存還是採用鍊錶儲存等。演算法設計就是在選定的儲存結構上設計乙個滿足要求的好演算法。
演算法五個重要特性
演算法必須滿足五個重要特性演算法五個要素的確切含義
1.有窮性(有限性)
對於任意一組合法輸入值,在執行有窮步驟之後一定能結束,即:演算法中的每個步驟都能在有限時間內完成。演算法與程式區別:程式沒有有窮性
2.確定性
對於每種情況下所應執行的操作,在演算法中都有確切的規定,使演算法的執行者或閱讀者都能明確其含義及如何執行。並且在任何條件下,演算法都只有一條執行路徑。
3.可行性
演算法中的所有操作都必須足夠基本,都可以通過已經實現的基本操作運算有限次實現之。
4.有輸入
作為演算法加工物件的量值,通常體現為演算法中的一組變數。有些輸入量需要在演算法執行過程中輸入,而有的演算法表面上可以沒有輸入,實際上已被嵌入演算法之中。
5.有輸出
它是一組與「輸入」有確定關係的量值,是演算法進行資訊加工後得到的結果,這種確定關係即為演算法的功能。
設計演算法時,通常應考慮達到的目標(判斷好壞的標準)
1. 正確性
首先,演算法應當滿足以特定的「規格說明」方式給出的需求。其次,對演算法是否「正確」的理解可以有以下四個層次:a.程式中不含語法錯誤;b.程式對於幾組輸入資料能夠得出滿足要求的結果;c.程式對於精心選擇的、典型、苛刻且帶有刁難性的幾組輸入資料能夠得出滿足要求的結果;d.程式對於一切合法的輸入資料都能得出滿足要求的結果;通常以第 c 層意義的正確性作為衡量乙個演算法是否合格的標準。
2. 可讀性
演算法主要是為了人的閱讀與交流,其次才是為計算機執行,因此演算法應該易於人的理解;另一方面,晦澀難讀的程式易於隱藏較多錯誤而難以除錯。
3. 健壯性
當輸入的資料非法時,演算法應當恰當地作出反映或進行相應處理,而不是產生莫名奇妙的輸出結果。並且,處理出錯的方法不應是中斷程式的執行,而應是返回乙個表示錯誤或錯誤性質的值,以便在更高的抽象層次上進行處理。
4. 高效率與低儲存量需求
通常,效率指的是演算法執行時間;儲存量指的是演算法執行過程中所需的最大儲存空間,兩者都與問題的規模有關。
5.可使用性
演算法分析
演算法分析是分析演算法占用計算機資源的情況。
所以演算法分析的兩個主要方面是分析演算法的時間複雜度和空間複雜度。
《演算法概論》8 8
題目 在精確的4sat exact 4sat 問題中,輸入為一組自居,每個字句都是恰好4個文字的析取,且每個變數最多在每個字句中出現一次。目標是求它的滿足賦值 如果該賦值存在。證明精確的4sat是np完全問題。證明 用歸約來證明 如果問題a可以歸約到問題b,記作a b,如果a是np完全問題,則通過歸...
演算法概論 8 8
在精確的4sat exact 4sat 問題中,輸入為一組子句,每個子句都是恰好4個文字的析取,且每個變數最多在每個子句中出現一次。目標是求它的滿足賦值 如果該賦值存在。證明精確的4sat是np 完全問題。考慮通過將3sat問題歸約到4sat exact 4sat 問題來驗證4sat exact 4...
演算法概論 8 9
在碰撞集 hitting set 問題中,給定一組集合 和預算 b 我們希望求乙個所有的 si 相交且規模不超過 b 的集合 h,當然,前提是這樣的集合確實存在。換句話說,我們希望對所有的 i 滿足 h si 請證明該問題是np 完全的。通過將最小頂點覆蓋問題歸約到hitting set問題來證明該...