Introduction to Computer Science and programming
Lecture 12: More about debuggin, knapsack problem, introduction to dynamic programming
1.找錯的幾個原則
a.變量的順序是否正確
b.拼寫錯誤,包括大小寫拼寫
c.忘記初始化變量
d.值和對象是否相等 ==
e.別名是否重複(深拷貝和淺拷貝)
f. 函數的返回值可能會修改實參的值
g.注意實際運行的程序是否但願運行的程序
f.調試代碼,而不是註釋,不要過度相信註釋
h.找別人來看看本身的代碼或者把本身的程序解釋給別人聽
i.走開休息一段時間,再回來
j.欲速則不達,別抱着試試的態度急急忙忙地修改,問問本身第一個想到的方案可以解決全部問題?解決這個問題會帶來新的問題嗎?
k.代碼並非越長越好
l.保存舊版本的代碼(使用git軟件),不然你會發現調試4個小時以後的版本還不如4小時以前的
m.記錄本身犯過的錯,不要再次浪費你的時間
2.揹包問題
a.解決問題的方法是依靠別人的思路(也許前人花了50年總結出來了很好的方法,沒有必要去閉門造車),若是你積累的多了,那麼之後遇到相似的問題你就有解決方案了。
b.貪婪算法 greedy algorithm 每一步都是對本身最優的
c.窮舉算法 exhaustive enumeration 列出全部的可能性選擇最好的,對於指數增加的可能性,窮舉法並很差
d.Dynamic programming 動態規劃,這個Dynamic 只是個名字,沒有特別的含義。斐波拉契的遞歸函數的調用就是指數增加的,overlapping subproblems