從算法到代碼,你需要知道的幾個要點

許多變成初學者都會遇到一個問題:我能分析出別人寫的代碼是否正確,但是我就是不知道他是怎麼把這些代碼寫出來的!

這個問題困擾着每個編程初學者,其實他們是不知道算法如何轉變爲代碼

針對這個問題,我想從我的經歷和學習方法,來解答如何將腦子裏的算法落地。

我將用一些例子來解釋,其中可能涉及到多種語言,在這一篇文章中語言不是重點,不必糾結。

Let's begin!

 

先來看一個例子:

某學校(大多“數算”書籍都喜歡用學校-_-!)有這樣一個需求,根據學生的考試成績,將成績分爲S、A、B、C、D、E六個等級。具體規則爲:分數大於等於95分,成績爲S;分數大於等於90但小於95分,成績爲A;分數大於等於80但小於90分,成績爲B;分數大於等於70分但小於80分,成績爲C;分數大於等於60但小於70分,成績爲D;當成績小於60分時,成績爲E;

這個需求對於老鳥們來說,在唸的時候,代碼已經在心中浮現了,可以說是“即時編譯”。但對於初學者來說,“臥槽要怎麼寫成代碼?”

重點要看分析過程,首先,我們將需求用簡潔的表達式來表述,就會成爲下面的樣子:

分數設爲score,那麼

score >= 95 ----> S

score >= 90 and score < 95 -----> A

score >=80 and score < 90 ------> B

score >=70 and score < 80------->C

score >=60 and score <70 ------->D

score < 60 -------->E

到這裏,需求的文字描述就變成了表達式描述。

And then,我們需要用僞代碼,來包裝這些條件,進一步把它們表述的更像是程序邏輯:

if(score >=95){
    設置該學生成績爲S
}else if(score >= 90 && score < 95){
    設置該學生成績爲A
}else if(score >=80 && score < 90){
    設置該學生成績爲B
}else if(score >=70 && score < 80){
    設置該學生成績爲C
}else if(score >=60 && score < 70){
    設置該學生成績爲D
}else{
    設置該學生成績爲E
}

此時,這段邏輯已經比較接近真實的代碼了。接下來,就要用到我們所學的語言,來將這段兒僞代碼,變成真正的代碼。

這裏我用PHP舉例:(PHP是世界最好的語言)


$score = 0;

if($score >= 95){
    setLevel($studentId,'S');
}else if(90 <= $score < 95){
   setLevel($studentId,'A');
}else if(80 <=$score < 90){
    setLevel($studentId,'B');
}else if(70 <= $score < 80){
    setLevel($studentId,'C');
}else if( 60 <= $score < 70){
    setLevel($studentId,'D');
}else{
    setLevel($studentId,'E');
}

當然這段邏輯可以改進爲很簡潔的兩行代碼,這裏不做算法優化討論。

到這一步,我們已經將一個需求,從人類自然語言描述,轉變爲程序語言描述。也就是算法到代碼的轉變。

 

遇到一個需求時,通常步驟是分析->表達式邏輯->僞代碼->套用編程語言。當熟練後或者需求比較簡單時,可以將中間兩步省略掉,在腦子裏轉化。但是當遇到複雜需求時,這個過程就顯得比較重要了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章