算法導論第一章,第二章筆記

第一章,第二章


算法導論讀書筆記
1、算法是什麼
2、要知道幾種數據結構的優勢和侷限
比如排序算法
NP問題是什麼




循環不變性,算法正確性的證明
布爾運算符  會短路的 
傳值,傳參的不同
複雜度分析
輸入規模
最壞情況和 平均情況




數據結構聽課筆記
1、
makefile來編譯c++程序
make是如何高效編譯程序的:通過檢測文件是否變化
具體如下:
1)如果這個工程沒有編譯過,那麼我們的所有C文件都要編譯並被鏈接。
2)如果這個工程的某幾個C文件被修改,那麼我們只編譯被修改的C文件,並鏈接目標程序。
3)如果這個工程的頭文件被改變了,那麼我們需要編譯引用了這幾個頭文件的C文件,並鏈接目標程序。
那麼如何檢測文件是否變化的呢?
存疑。


2、
c++程序的調試器、debugger
ddd,gdb等等
討論課上會講


3、
證明程序正確
right output
will halt
如何證明算法的準確性
test case? 但test case不是無窮的


4、
爲什麼要學習算法
比如中文,英文
都有語法,動詞等
儘管表面上看起來不同,但是其中的語義邏輯是相同的,而算法就是程序中的邏輯
儘管c++和python程序不一樣,但是他們的僞代碼描述、程序實現的邏輯是一樣的,所以 要學習算法,學習算法的時候多用僞代碼描述


5、
程序的本質: Input-->output
對於 sort(排序算法), input爲一組數,output爲 sorted permutation 


6、
數據結構要學什麼
store and organize data for efficient access


7、
computability
什麼是可計算問題,哪些問題計算機可以處理
turing machine:
enigma破譯德軍密碼
證明了 哪些問題 是可計算的
比如 halting problem


8、
pseudocode 僞代碼 示範
分析插入排序的 複雜度 並證明 該算法的正確性
即對loop invariant的證明
a[0,j-1] is sorted
借鑑了數歸方法(第一數學歸納法):
1、Initialization
2、Maintenance
3、Termination
具體證明http://www.cnblogs.com/bamboo-talking/archive/2011/02/05/1950197.html


9、
時間複雜度與什麼有關
1、n 問題的規模
2、step,程序的步數


插入排序的 最壞複雜度爲 n^2,整體爲 a*n^2+b*n+c
爲什麼不考慮那些常數  和 低階項, 而只考慮growth rate
因爲當n 小 時,該算法運行時間很小,有效率
當n很大時候,運行時間只取決n^2,該項爲 高階項


關注最壞時間複雜度,因爲
1有最壞預期,not exceed limited time 比如飛控系統
2dont know the average input
關於平均時間,因爲
對於 搜索引擎,常用的 是快排,儘管他的最壞複雜度比 歸併排序高,但是我們應該考慮的是 平均時間

另外對於不同cpu,不同指令的執行速度時不同的,這裏認爲對於同一臺cpu那些指令都是常數級執行時間的 










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