?🐓?算法
算法是對特定問題求解步驟的一種描述,算法是指令的有限序列。其中每一條指令表示一個或者多個操作。
?🐓?算法的5種屬性
有窮性
一個算法必須總是在執行有窮的步驟后,且在每個步驟執行的過程中時間是有限的
1.有窮性意味著算法必須在執行有限步驟后結束。
2.這意味著算法不會陷入無限循環或需要無限長的時間來執行。
3.同時,每個步驟都應該在可接受的時間內完成,以確保算法的效率。
確定性
算法中每一條指令必須要有準確的含義,不存在其他的含義。
1.確定性意味著算法的每一步都應該明確、無歧義地定義。
2.對于算法中的每一種情況,需要執行的動作都應該嚴格、清晰地規定,不應有模糊或不確定的地方。
3.這有助于確保算法的正確性和可預測性。
可行性
一個算法是可行的就是算法描述的操作是可以通過已經執行的基本運算有限次數實現
1.可行性意味著算法的每一步都應該是可執行的。
2.這意味著算法中描述的操作應該是可以通過已經實現的基本運算來完成的。
3.此外,可行性還涉及到算法所需的資源(如時間、存儲空間等)是否在實際應用中是可接受的。
輸入
一個算法有零個或多個輸入,這些輸入取自于某個特定對象的集合
1.輸入是算法開始運算前給予算法的量。
2.一個算法可以沒有輸入(例如,某些隨機生成數字或圖案的算法),也可以有多個輸入。
3.輸入可以來自外部提供,例如用戶輸入,也可以是算法內部給定的,例如通過賦值語句。
4.輸入的量通常與特定的問題或應用場景相關。
輸出
一個算法有一個或多個輸出,這些輸出同輸入有著某些特定關系的量。
1.輸出是算法計算的結果。
2.每個算法至少應該有一個輸出,因為算法的目的是為了解決問題或完成某項任務,而這些任務的結果通常需要被返回或展示。
3.輸出可以是數字、文本、圖像或其他形式的數據,具體取決于算法的應用場景。
?🐓?算法的要求
正確性
算法可以正確的滿足具體問題的需求
無歧義性
算法的行為應該是明確的,對于任何給定的輸入,都應該只有一個明確的輸出。
滿足需求
算法應該能夠準確地解決所設計的問題,滿足所有指定的需求。
正確性層次
1.語法正確:算法的代碼應該符合編程語言的語法規則。
2.合法輸入的正確性:對于所有合法的輸入,算法應該產生正確的輸出。
3.非法輸入的處理:算法應該能夠處理非法的輸入,并給出適當的錯誤消息或處理結果。
4.健壯性測試:算法應該能夠通過一系列精心設計的測試,包括邊界條件和異常情況
可讀性
算法要保證其他讀者對程序的理解難度
代碼清晰:算法的代碼應該簡潔明了,易于理解。
變量和函數命名:使用有意義的變量和函數名,有助于增強代碼的可讀性。
注釋:適當的注釋可以解釋代碼的工作原理和目的,提高可讀性。
健壯性
算法要保證有容錯的處理,當輸入錯誤或者非法的數據時后,算法可以對其做出相對應的反應,而不是出現莫名其妙的錯誤。
異常處理:算法應該能夠處理異常情況,如輸入錯誤、數據丟失等,并給出適當的錯誤消息或處理結果。
容錯性:算法應該具有一定的容錯性,即使輸入數據存在輕微的錯誤或不一致,也能產生合理的結果。
可擴展性
算法應該易于擴展以適應未來的需求。這意味著算法應該設計成模塊化結構,以便在需要時添加新功能或修改現有功能。
模塊化設計:算法應該設計成模塊化結構,方便添加新功能或修改現有功能。
接口設計:提供清晰的接口,方便與其他模塊或系統進行集成。
可維護性
算法應該易于修改和維護。隨著需求的變化,算法可能需要進行修改。一個好的算法應該設計成易于修改,同時保持其原有的正確性和效率。
文檔:提供詳細的文檔,解釋算法的工作原理、輸入要求、輸出格式等。
測試:編寫測試用例,確保算法的正確性和穩定性。
代碼審查:定期進行代碼審查,確保代碼質量和可維護性。
可重用性
算法應該具有高度的可重用性,這意味著它可以在不同的場景和問題中重復使用。通過設計通用的算法和數據結構,可以提高代碼的重用性。
通用性:設計通用的算法和數據結構,使其可以在不同的場景和問題中重復使用。
抽象和封裝:使用抽象和封裝技術,隱藏不必要的細節,提高算法的重用性。
效率和存儲要求
效率就是算法所指的時間復雜度,存儲要求就是算法所致的空間復雜度,一般情況這兩個要求會和問題的復雜性和算法的代碼有所關聯。?
接下來就需要展開去說說時間復雜度和空間復雜度了,不管時考研還是計算機的算法學習,甚至一個程序員應該知道的內容就是時間復雜度了。