查表替換複雜運算

2021-05-06 17:24:08 字數 1157 閱讀 7004

一些複雜運算的值很有可能被重複用到!但是看上去它們可能並不顯眼,所以程式設計師往往忽略了它們的影響。請看下面這段示例**。

floatpercentage(int* array,intlength,int

parameter1,intparameter2,)  

return(float)sum/(float)length;  } 

顯然,算式parameter1* parameter2-500和parameter1* parameter2+500被反覆地用到。為了避免這種重複計算,可以事先算出結果並加以儲存,在用到時就無須重複計算了。例如,上述**可以改寫為:

floatpercentage(int* array,intlength,intparameter1,intparameter2,)  

return(float)sum/(float)length;  } 

上面這個例子看起來好像和9.7.8小節中將要講到的將耗時計算移出迴圈的方法有點像,但要注意兩者並不完全相同。即使複雜的計算語句不出現在迴圈中,只要這個計算需要被程式反覆地使用多次,那麼就應該考慮用乙個變數將結果預先儲存起來,然後在需要時用該變數替換掉運算。

實際中的另外乙個非常典型的例子是在做影象旋轉時,往往會用到庫函式sin()和cos()等來計算角度,而這些庫函式的計算過程都比較複雜,這時如果能將這些運算結果事先儲存起來,那麼就可以節省相當多的時間。筆者在《visual c++ 數字影象處理開發入門與程式設計實踐》一書中曾經給出過乙個運用最鄰近插值法進行影象旋轉的函式(鑑於篇幅,本書中不具體給出該函式),該函式中的sin()和cos()庫函式計算量被一些變數所取代,讀者可以查閱一下那段**,然後想想如果不這樣做,在執行該函式時,程式將呼叫這些複雜的庫函式多少次

如果某些複雜的計算需要被重複地計算許多次,那麼就用一些變數來臨時儲存它們。

如何用查表替代運算

對於sin,cos,tan等三角函式來說,使用cpu fpu計算所花費的時間比加減法員算要慢很多的時間 這就使得在很多密集的三角運算花費了大量的時間,如何在保證一定精度的情況下,使用近似的方法來獲取這些函式的數值呢 常規的做法,就是犧牲空間換取時間的查表法 需要注意的是,查表法不是萬能的,必須針對特...

排序演算法複雜度速查表

檢驗乙個演算法的優劣的很重要乙個標準就是其演算法複雜度。各種常用排序演算法複雜度表 類別 排序方法 時間複雜度 空間複雜度 穩定性 平均情況 最好情況 最壞情況 輔助儲存 插入排序 直接插入 o n2 o n o n2 o 1 穩定 shell排序 o n 1.3 o n o n 2 o 1 不穩定...

Python數值替換 基礎運算

1.1一對一 df age replace 33,24 將age一列中所有33替換成24 df.replace np.nan,o df.fillna 0 與上一行功能相同1.2多對一 df.replace 1 2,3 56 1.3多對多 df.replace 2.1兩列相加減 數值型別的兩列資料 一...