轉載:煮咖啡的豬!html
打表是一種典型的用空間換時間的技巧,通常指將全部可能須要用到的結果事先計算出來,這樣後面須要用到時就能夠直接查表得到。打表常見的用法有以下幾種:算法
一、在程序中一次性計算出全部須要用到的結果,以後的查詢直接取這些結果。數組
這個是最經常使用到的用法,例如在一個須要查詢大量Fibonacci數F(n)的問題中,顯然每次從頭開始計算是很是耗時的,對Q次查詢會產生O(nQ)的時間複雜度;而若是進行預處理,即把全部Fibonacci數預先計算並存在數組中,那麼每次查詢就只需O(1)的時間複雜度,對Q次查詢就值須要O(n+Q)的時間複雜度(其中O(n)是預處理的時間)。spa
二、在程序B中分一次或屢次計算出全部須要用到的結果,手工把結果寫在程序A的數組中,而後在程序A中就能夠直接使用這些結果。htm
這種用法通常是當程序的一部分過程小號的時間過多,或是沒有想到好的算法,所以在另外一個程序中使用暴力算法去i出結果,這樣就能直接在源程序中使用這些結果。例如對n皇后問題來講,若是使用的算法不夠好,就容易超時,而能夠在本地用程序計算付出對全部n來講n皇后問題的方案數,而後把算出的結果直接卸載數組中,就能夠根據題目輸入的n來直接輸出結果。blog
三、對一些感受不會作的題目,先用暴力程序計算小範圍數據的結果,而後找規律,或許就能發現一些「蛛絲馬跡」。ci
這種用法在數據範圍很是大時候容易用到,由於這樣的題目可能不是用直接能想到的算法來解決的,而須要尋找一些規律才能獲得結果。get
例如:PAT乙級1044/甲級1100 火星數字技巧