算法概念與描述


這很明顯是一個百度的東西。。。
所以目錄我都懶得整了。。。
算法就是准確描述解決一類問題的方法
比如解決雞兔同籠問題
這個算法首先就是輸入
然后就運算
然后輸出
這樣輸入,運算,輸出,就可以稱為一個簡單的算法。

一個合格的算法應該滿足以下5個條件

  • 確切性
    你能確切描述這個算法,不存在任何含糊和二義性
  • 有窮性
    經過有限次數的執行之后可以求出問題的解
    怎么算是無窮呢?
    輸出\(\frac{1}{3}\)的小數形式
    無限循環小數怎么有限次輸出解決嘛。。。
  • 可行性
    你的程序是可以運行的
    什么叫做不可行呢?
    比如輸出\(\pi\)就很不可行
    (無限不循環小數輸出個鬼)
  • 輸入項
    任意個合法輸入項。如果輸入項為0表示輸入已經給出(默認)。
    不會有程序不存在輸入項(輸入項為0項也叫作存在,那個叫做初始條件)
    合法的輸入項表示這個輸入項是會影響輸出的,而且這個輸入項對於問題來說是合理的。
    如果這個輸入項無論輸入什么問題的結果都不變,那么這個輸入項沒有意義。
  • 輸出項
    必須有輸出,表示問題的結果
    輸出愛有幾個就輸幾個,你管不着。

如何評價一個算法

首先我們從從正確性來說

正確性就是指在算法具備上述五個條件的前提下,對於每一個輸入,都能得到確定的,正確的輸出。
比如我計算雞兔同籠問題,給我整出了\(-1\)只雞,\(1.5\)只兔子
這叫做不正確

然后就是時空復雜度

是的我時間空間是一起分析的
時間復雜度就表示執行算法所需要的計算工作量。一般來說,時間復雜度問題規模的遞增函數。
問題的規模越大,時間復雜度越高。
比如說我用枚舉法解決雞兔同籠問題
有100個頭的時候,我要枚舉50次(不就全部都是雞一直削減到沒有雞)
10000000000個頭的時候,我要枚舉5000000000次
隨着頭的個數的增長,問題的規模越來越大,時間復雜度也越來越高。
當然,如果你用解二元一次方程組的方法。。。時間復雜度就不變了
所以枚舉法的時間復雜度高於解方程

至於空間復雜度,就是你解決這個問題的時候所用的內存
我們如果要開一棵線段樹,那么空間復雜度就是\(O(4n)\),這個也是隨着問題的規模越大,空間復雜度越大的典例。
但是為了我們開全局變量的方便,我們一般都會在不知道n的時候直接開到\(4n_{max}\),但是實際上解決問題所用的空間復雜度只是\(4n\)

接着就是可讀性

算法的可讀性就是指。。。就是指你讀它的難易程度。
比如說當你在做數學題

不可讀的過程是長成這樣的:

可讀的過程。。。不知道真的不知道

最后就是魯棒性

(emmm競賽中沒有遇見過)
就是指你的程序應對非法輸入的應變能力
比如說我雞兔同籠
1.5個頭,-1只腳,叫做非法輸入。
在比如說我計算a/b,輸入b=0,這叫做非法輸入
魯棒性是指一個算法對不合理數據輸入的反應能力和處理能力,也稱為容錯性

算法的描述

怎么描述算法呢?我們可以用自然語言,流程圖和偽代碼
比如交換兩個變量的值。
自然語言描述:我直接告訴你怎么做。先給我定義一個新的變量,保存其中一個變量的值。然后另一個變量覆蓋這個變量。新定義的變量再賦值給另一個變量
(我都暈了)
流程圖:自己畫去
偽代碼:由於這題太簡單了。。。偽代碼都變成代碼了

int c=a; a=b; b=c;

偽代碼其實就是用代碼來描述一個程序的功能(注意不是實現)
因為不同語言在實現同一個功能時代碼可能長得不一樣
所以我們就用類似於英語的偽代碼來描述這個模塊的組成和功能。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM