【軟件設計師】通俗易懂的去了解算法的特性和要求

?🐓?算法

算法是對特定問題求解步驟的一種描述,算法是指令的有限序列。其中每一條指令表示一個或者多個操作。

?🐓?算法的5種屬性

有窮性

一個算法必須總是在執行有窮的步驟后,且在每個步驟執行的過程中時間是有限的

1.有窮性意味著算法必須在執行有限步驟后結束。

2.這意味著算法不會陷入無限循環或需要無限長的時間來執行。

3.同時,每個步驟都應該在可接受的時間內完成,以確保算法的效率。

確定性

算法中每一條指令必須要有準確的含義,不存在其他的含義。

1.確定性意味著算法的每一步都應該明確、無歧義地定義。

2.對于算法中的每一種情況,需要執行的動作都應該嚴格、清晰地規定,不應有模糊或不確定的地方。

3.這有助于確保算法的正確性和可預測性。

可行性

一個算法是可行的就是算法描述的操作是可以通過已經執行的基本運算有限次數實現

1.可行性意味著算法的每一步都應該是可執行的。

2.這意味著算法中描述的操作應該是可以通過已經實現的基本運算來完成的。

3.此外,可行性還涉及到算法所需的資源(如時間、存儲空間等)是否在實際應用中是可接受的。

輸入

一個算法有零個或多個輸入,這些輸入取自于某個特定對象的集合

1.輸入是算法開始運算前給予算法的量。

2.一個算法可以沒有輸入(例如,某些隨機生成數字或圖案的算法),也可以有多個輸入。

3.輸入可以來自外部提供,例如用戶輸入,也可以是算法內部給定的,例如通過賦值語句。

4.輸入的量通常與特定的問題或應用場景相關。

輸出

一個算法有一個或多個輸出,這些輸出同輸入有著某些特定關系的量。

1.輸出是算法計算的結果。

2.每個算法至少應該有一個輸出,因為算法的目的是為了解決問題或完成某項任務,而這些任務的結果通常需要被返回或展示。

3.輸出可以是數字、文本、圖像或其他形式的數據,具體取決于算法的應用場景。

?🐓?算法的要求

正確性

算法可以正確的滿足具體問題的需求

無歧義性

算法的行為應該是明確的,對于任何給定的輸入,都應該只有一個明確的輸出。

滿足需求

算法應該能夠準確地解決所設計的問題,滿足所有指定的需求。

正確性層次

1.語法正確:算法的代碼應該符合編程語言的語法規則。

2.合法輸入的正確性:對于所有合法的輸入,算法應該產生正確的輸出。

3.非法輸入的處理:算法應該能夠處理非法的輸入,并給出適當的錯誤消息或處理結果。

4.健壯性測試:算法應該能夠通過一系列精心設計的測試,包括邊界條件和異常情況

可讀性

算法要保證其他讀者對程序的理解難度

代碼清晰:算法的代碼應該簡潔明了,易于理解。

變量和函數命名:使用有意義的變量和函數名,有助于增強代碼的可讀性。

注釋:適當的注釋可以解釋代碼的工作原理和目的,提高可讀性。

健壯性

算法要保證有容錯的處理,當輸入錯誤或者非法的數據時后,算法可以對其做出相對應的反應,而不是出現莫名其妙的錯誤。

異常處理:算法應該能夠處理異常情況,如輸入錯誤、數據丟失等,并給出適當的錯誤消息或處理結果。

容錯性:算法應該具有一定的容錯性,即使輸入數據存在輕微的錯誤或不一致,也能產生合理的結果。

可擴展性

算法應該易于擴展以適應未來的需求。這意味著算法應該設計成模塊化結構,以便在需要時添加新功能或修改現有功能。

模塊化設計:算法應該設計成模塊化結構,方便添加新功能或修改現有功能。

接口設計:提供清晰的接口,方便與其他模塊或系統進行集成。

可維護性

算法應該易于修改和維護。隨著需求的變化,算法可能需要進行修改。一個好的算法應該設計成易于修改,同時保持其原有的正確性和效率。

文檔:提供詳細的文檔,解釋算法的工作原理、輸入要求、輸出格式等。

測試:編寫測試用例,確保算法的正確性和穩定性。

代碼審查:定期進行代碼審查,確保代碼質量和可維護性。

可重用性

算法應該具有高度的可重用性,這意味著它可以在不同的場景和問題中重復使用。通過設計通用的算法和數據結構,可以提高代碼的重用性。

通用性:設計通用的算法和數據結構,使其可以在不同的場景和問題中重復使用。

抽象和封裝:使用抽象和封裝技術,隱藏不必要的細節,提高算法的重用性。

效率和存儲要求

效率就是算法所指的時間復雜度,存儲要求就是算法所致的空間復雜度,一般情況這兩個要求會和問題的復雜性和算法的代碼有所關聯。?

接下來就需要展開去說說時間復雜度空間復雜度了,不管時考研還是計算機的算法學習,甚至一個程序員應該知道的內容就是時間復雜度了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/718268.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/718268.shtml
英文地址,請注明出處:http://en.pswp.cn/news/718268.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深度學習 精選筆記(7)前向傳播、反向傳播和計算圖

學習參考: 動手學深度學習2.0Deep-Learning-with-TensorFlow-bookpytorchlightning ①如有冒犯、請聯系侵刪。 ②已寫完的筆記文章會不定時一直修訂修改(刪、改、增),以達到集多方教程的精華于一文的目的。 ③非常推薦上面(學習參考&#x…

藍橋杯:單詞分析

題目 題目描述 小藍給學生們組織了一場考試,卷面總分為 100 分,每個學生的得分都是一個 0 到 100 的整數。 如果得分至少是 60 分,則稱為及格。如果得分至少為 85 分,則稱為優秀。 請計算及格率和優秀率,用百分數表…

Rstudio-深度學習執行代碼

RStudio是一個開源的集成開發環境(IDE),專門用于R編程語言的開發和數據分析。R語言是一種流行的統計計算和數據可視化語言,廣泛用于數據科學、統計學和機器學習領域。 RStudio提供了許多功能強大的工具,包括代碼編輯器…

SQL 基本條件查詢DQL 練習

DQL DQL(Data Query Language)是SQL語言中的一種類型,用于執行數據查詢操作。它是SQL的一部分,用于從數據庫中檢索數據。DQL語句用于從一個或多個表中選擇、過濾和排序數據。常見的DQL查詢語句包括SELECT、FROM、WHERE、GROUP BY…

U盤無法讀取?輕松掌握正確解決方法!

“為什么我的u盤插入電腦后會顯示無法讀取呢?想查看一些比較重要的文件,但就是無法讀取U盤,想問問大家,我應該怎么操作呢?” U盤作為一種便捷的數據存儲設備,廣泛應用于我們的日常生活和工作中。然而&#…

獨立游戲《星塵異變》UE5 C++程序開發日志2——創建并編寫一個C++類

在本篇日志中,我們將要用一個C類來實現一個游戲內的物品,同時介紹UCLASS、USTRUCT、UPROPERTY的使用 一、創建一個C類 我們在UE5的"內容側滑菜單"中,在右側空白中右鍵選擇"新建C類",然后可以選擇一個想要的…

python70-Python的函數入門,了解下函數

函數是執行特定任務的一段代碼,程序通過將一段代碼定義成函數,并為該函數指定一個函數名,這樣即可在需要的時候多次調用這段代碼。因此,函數是代碼復用的重要手段。學習函數需要重點掌握定義函數、調用函數的方法。 與函數緊密相關的另一個知識點是lambda表達式。lamda表達…

Spring AOP(Aspect-Oriented Programming,面向切面編程)介紹

Spring AOP(Aspect-Oriented Programming,面向切面編程)是Spring框架的一個重要模塊,它提供了一種強大的方式來幫助開發者實現橫切關注點(cross-cutting concerns)的模塊化。橫切關注點是指那些影響多個模塊…

Linux設備模型(十一) - platform設備

一,platform device概述 在Linux2.6以后的設備驅動模型中,需關心總線、設備和驅動這3個實體,總線將設備和驅動綁定。在系統每注冊一個設備的時候, 會尋找與之匹配的驅動;相反的,在系統每注冊一個設備的時…

【Redis】實際應用 - 緩存

文章目錄 1. 緩存的基本概念2. Redis作為緩存的優勢2.1 內存存儲2.2 持久性選項2.3 數據結構豐富 3. Redis緩存的使用3.1 安裝和配置Redis3.2 連接到Redis3.3 存儲和獲取數據3.4 設置過期時間 4. 緩存策略4.1 LRU(最近最少使用)4.2 數據失效4.3 主動刷新…

可讓照片人物“開口說話”阿里圖生視頻模型EMO,高啟強普法

3 月 1 日消息,阿里巴巴研究團隊近日發布了一款名為“EMO(Emote Portrait Alive)”的 AI 框架,該框架號稱可以用于“對口型”,只需要輸入人物照片及音頻,模型就能夠讓照片中的人物開口說出相關音頻&#xf…

PDN分析及應用系列二-簡單5V電源分配-Altium Designer仿真分析-AD

PDN分析及應用系列二 —— 案例1:簡單5V電源分配 預模擬DC網絡識別 當最初為PCB設計打開PDN分析儀時,它將嘗試根據公共電源網絡命名法從設計中識別所有直流電源網絡。 正確的DC網絡識別對于獲得最準確的模擬結果非常重要。 在示例項目中已經識別出主DC網絡以簡化該過程。 …

Vulnhub靶機:Bellatrix

一、介紹 運行環境:Virtualbox 攻擊機:kali(10.0.2.4) 靶機:Bellatrix(10.0.2.9) 目標:獲取靶機root權限和flag 靶機下載地址:https://www.vulnhub.com/entry/hogwa…

Leetcode 3070. Count Submatrices with Top-Left Element and Sum Less Than k

Leetcode 3070. Count Submatrices with Top-Left Element and Sum Less Than k 1. 解題思路2. 代碼實現 題目鏈接:3070. Count Submatrices with Top-Left Element and Sum Less Than k 1. 解題思路 這一題就是一個二維的累積數組的問題,我們直接求一…

網絡學習:MPLS技術基礎知識

目錄 一、MPLS技術產生背景 二、MPLS網絡組成(基本概念) 1、MPLS技術簡介:Multiprotocol Lable Switching,多協議標簽交換技術 2、MPLS網絡組成 三、MPLS的優勢 四、MPLS的實際應用 一、MPLS技術產生背景 1、IP采用最長掩碼…

Power BI vs Superset BI 調研報告

調研結論 SupersetPower BI價格開源①. Power BI Pro 每人 $10/月($120/年/人) ②. Power BI Premium 每人 $20/月($240/年/人) ③. Power BI Embedded:4C10G $11W/年 權限基于角色的訪問控制,支持細粒度的訪問: 表級別、庫級別、圖表級別,看板級別,用戶級別 基于角色…

每天一個數據分析題(一百八十五)

給定下述Python代碼段,試問哪個選項正確描述了該代碼段的功能? data_raw[‘gender’] data_raw[‘gender’].map({‘Male’: 1, ‘Female’: 0}) A. 代碼中對gender變量進行了獨熱編碼(One-Hot Encoding),并將gender中的缺失值填充為類別平…

深度學習API——keras初學

keras定義: Keras是一個深度學習API(人工神經網絡庫),使用Python語言編寫的github開源項目,主要開發者為谷歌工程師。Keras底層可調用不同的機器學習平臺,如TensorFlow、Theano或micsoft-CNTK。 作用&…

Tomcat的配置文件

Tomcat的配置文件詳解 一.Tomcat的配置文件 Tomcat的配置文件默認存放在$CATALINA_HOME/conf目錄中,主要有以下幾個: 1.server.xml: Tomcat的主配置文件,包含Service, Connector, Engine, Realm, Valve, Hosts主組件的相關配置信息&#x…

【推薦】免費AI論文寫作神器-「智元兔 AI」

還在為寫論文焦慮?免費AI寫作大師來幫你三步搞定! 智元兔AI是ChatGPT的人工智能助手,并且具有出色的論文寫作能力。它能夠根據用戶提供的題目或要求,自動生成高質量的論文。 不論是論文、畢業論文、散文、科普文章、新聞稿件&…