第一章演算法概述總結
程式碼規範
類及其排版格式
宣告屬性依次序是public:、protected:、private:。
關鍵字public,protected,private不要縮排,宣告的函式和變數縮排一個製表符。
類宣告前應加上註釋,註明該類的主要作用。
不改變物件成員變數的類成員函式都應標記為const,可以預防意外的變動,提高程式的健壯性。
類中成員必須進行初始化,可以通過建構函式的初始化列表初始化成員或者寫一個專門初始化成員的函式(如init())。
有繼承關係的基類中解構函式一定要宣告為虛擬函式。
為了防止標頭檔案重複包含,應在標頭檔案處加上#ifndef/#define/#endif巨集。
函式和成員變數的宣告分開。
函式的宣告與定義
返回型別和函式名在同一行,合適的話,引數也放在同一行。
返回值總是和函式名在同一行;引數列表的左圓括號總是和函式名在同一行。
函式名和左圓括號間沒有空格;圓括號與引數間沒有空格。
左大括號總是新起一行;右大括號總是單獨位於函式最後一行。
函式的宣告(標頭檔案)和實現處(CPP)的所有形參名稱必須保持一致。
函式的內容總與左括號保持一個製表符的縮排。
引數間的逗號總加一個空格。
函式的大小一般不要超過50行,函式越小,程式碼越容易維護。
函式宣告前應加上註釋,註明該函式的作用,如果該函式有比較多的引數,還應該加上引數含義和返回值的註釋。
如果函式的引數是類物件,應使用物件的指標或引用來傳遞,以提高效率。
空行
空行起著分隔程式段落的作用。空行得體(不過多也不過少)將使程式的佈局更加清晰。空行不會浪費記憶體,雖然列印含有空行的程式是會多消耗一些紙張,但是值得。所以不要捨不得用空行。
程式碼行
一行程式碼只做一件事情,如只定義一個變數,或只寫一條語句。這樣的程式碼容易閱讀,並且方便於寫註釋。
if、for、while、do等語句自佔一行,執行語句不得緊跟其後。不論執行語句有多少都要加{}。這樣可以防止書寫失誤。
對齊
程式的分界符‘{’和‘}’應獨佔一行並且位於同一列,同時與引用它們的語句左對齊。
{ }之內的程式碼塊在‘{’右邊一個製表符左對齊。
註釋
註釋雖然寫起來很痛苦,但對保證程式碼可讀性至為重要。當然,註釋的確很重要,但最好的程式碼本身就是文件,類名和變數名意義明確要比通過註釋解釋模糊的命名要好的多。
演算法概念
“演算法是任何定義良好的計算程式,它取某些值或值的集合作為輸入,併產生某些值或值的集合作為輸出。因此,演算法是將輸入轉化為輸出的一系列計算步驟。”
演算法的空間複雜度
程式p的空間複雜度指該程式執行時所需的記憶體空間大小,包括:
指令空間:儲存經過編譯之後的程式指令所需的空間。
資料空間:常量和簡單變數、複合變數(陣列、連結串列、樹和圖等)
環境棧空間(函式呼叫)
複合變數所需空間常常和問題例項特徵有關。
決定演算法時間複雜性的因素
演算法的時間複雜性取決於
(1)求解問題的規模;
2)具體的輸入資料;
⑶演算法本身的設計。
難解問題
有一類問題目前是難解問題(NPC問題)
頂點覆蓋問題
子集和問題
哈密爾頓迴路問題旅行售貨員問題
以上問題都可以歸結為一個問題
如果發現某一個問題與上述問題等價,則該問題目前沒有多項式解