題記:花了斷斷續(xù)續(xù)四個月的時間,終于將Coursera上Robert Sedgewick老師的普林斯頓兩部分算法課學(xué)習(xí)完。上課時僅以滿分完成作業(yè)為目標(biāo),每周都趕得緊緊張張,回想起來才發(fā)現(xiàn)這些基本數(shù)據(jù)結(jié)構(gòu)有些已經(jīng)遺忘到只剩下一個概念了,于是做個計劃:溫習(xí)一遍教材,并把這些基本數(shù)據(jù)結(jié)構(gòu)手寫一遍加深印象。

第一章 基礎(chǔ)

1. 算法課的正確打開方式

1.1. 研究一個新的應(yīng)用領(lǐng)域時,如何將其轉(zhuǎn)換為可計算問題:

1)定義API;

2)根據(jù)特定的應(yīng)用場景開發(fā)用例代碼;

3)定義類實例變量所需的數(shù)據(jù)結(jié)構(gòu)(一組值集的表示),并通過它實現(xiàn)API所對應(yīng)的抽象數(shù)據(jù)類型;

4)描述算法(實現(xiàn)一系列操作的方法),并根據(jù)它實現(xiàn)類中的實例方法;

5)分析算法的性能特點。

1.2. 在實驗可以重復(fù)執(zhí)行以及假定可以被證偽的前提下,如何通過科學(xué)方法得出正確的計算模型(算法):

1)細(xì)致地觀察應(yīng)用場景的特點;

2)根據(jù)觀察結(jié)果提出假設(shè)模型;

3)根據(jù)模型預(yù)測計算結(jié)果;

4)繼續(xù)觀察并核實預(yù)測的準(zhǔn)確性;

5)如此反復(fù)直到預(yù)測和觀察一致。

1.3. 書中研究各類問題的基本步驟(上文1&2):

1)完整而詳細(xì)地定義問題,找出解決問題所需的基本抽象操作并定義一份API;

2)簡潔地實現(xiàn)一種初級算法,給出一個精心組織的開發(fā)用例并使用實際數(shù)據(jù)作為輸入;

3)當(dāng)實現(xiàn)所能解決的問題的最大規(guī)模達(dá)不到期望時決定改進還是放棄;

4)逐步改進實現(xiàn),通過經(jīng)驗性分析或(和)數(shù)學(xué)分析驗證改進后的效果;

5)用更高層次的抽象表示數(shù)據(jù)結(jié)構(gòu)或算法來設(shè)計更高級的改進版本;

6)如果可能盡量為最壞情況下的性能提供保證,但在處理普通數(shù)據(jù)時也要有良好的性能;

7)在適當(dāng)?shù)臅r候講更細(xì)致的深入研究留給有經(jīng)驗的研究者并繼續(xù)解決下一個問題。

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運,軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式