1. 你無法斷定程序會在什么地方耗費(fèi)運(yùn)行時(shí)間。瓶頸經(jīng)常出現(xiàn)在想不到的地方,所以別急于胡亂找個(gè)地方改代碼,除非你已經(jīng)證實(shí)那兒就是瓶頸所在。
2. 估量。在你沒對代碼進(jìn)行估量,特別是沒找到最耗時(shí)的那部分之前,別去優(yōu)化速度
3. 花哨的算法在 n 很小時(shí)通常很慢,而 n 通常很小。花哨算法的常數(shù)復(fù)雜度很大。除非你確定 n 總是很大,否則不要用花哨算法(即使 n 很大,也優(yōu)先考慮原則 2 )。比如,解決常見問題時(shí),最簡單的樹——二叉樹(binary tree),總是比那些復(fù)雜的樹(AVL樹,伸展樹(splay tree)和紅黑樹、B-樹(B-tree),多叉樹(trie))來的高效
4. 花哨的算法比簡單算法更容易出 bug 、更難實(shí)現(xiàn)。盡量使用簡單的算法配合簡單的數(shù)據(jù)結(jié)構(gòu)。(拿不準(zhǔn)就窮舉)
????只要掌握了數(shù)據(jù)結(jié)構(gòu)中的四大法寶,就可以包打天下,他們是:array 、linked list 、hash table、binary tree?
????這四大法寶可不是各自為戰(zhàn)的,靈活結(jié)合才能游刃有余
????比如,一個(gè)用hash table組織的symbol table,其中是一個(gè)個(gè)由字符型array構(gòu)成的linked list
5. 以數(shù)據(jù)為中心。如果已經(jīng)選擇了正確的數(shù)據(jù)結(jié)構(gòu)并且把一切都組織得井井有條,正確的算法也就不言自明。編程的核心是數(shù)據(jù)結(jié)構(gòu),而不是算法
6. 沒有原則 6?