優化時間效率的方法

2021-04-01 15:20:54 字數 2445 閱讀 7282

優化時間效率的方法

1.常數計算的優化

乙個表示式如果經常包含常數計算

,則由於與數學表示式近似

,易讀性是很好

,但是執行效率卻不高.例如

:for i:=1 to 100 do

for j:=1 to 100 do

begin

tax:=a[i,j]-3200/12;

int:=irate[j]/365/12-i;

b:=tax/3*4;

end在上面的程式中

,常數表示式

3200/12,365*12,4/3

都要重複計算

10000次,

這樣顯然是沒有必要的

.於是可以改為

c1:=3200/12;

mc:=365*12;

c2:=4/3;

for i:=1 to 100 do

for j:=1 to 100 do

begin

tax:=a[i,j]-c1;

int:=irate[j]/mc –i;

b:=tax*c2;

end這樣

c1,c2,mc

只計算一次並保持了原來的易讀性

.而且這樣寫即清楚有提高了程式的效率

2.算術運算的優化

計算機中各種算術運算的效率相差很大

,稍加注意就可以提高程式的效率

.算術運算的速度由高到低為:加法

>

減法>

乘法>

除法>

整數冪運算

>

實數冪運算

所以提高效率的方法是

:(1)

用加法代替乘法

(僅對小整數而言

)3*i

不如i+i+i

(2)以乘法代替除法

a/0.5

不如a*0.2

快(3)

對於多次除法運算使用下面的替換更有意義

a:=2.0/x;

c:=b+d/x;

e:=(f-g)/x;

改寫為:

px:=1/x;

a:=2.0*px;

c:=b+d*px;

e:=(f-g)*px;

(4)盡量少用實數冪

b3.0/2.0

不如sqrt(b3)

(5)高次整數冪應該利用降階操作

p:=a*x^6+b*x^5-c*x^3+d*x^2+e;

不如寫為

:p:=(((a*x+b)*x*x-c)*x+d)*x*x+e;

前者為16

次乘法和

4次加減法

,後者為

6次乘法和

4次加減法相差很多

3.利用非擴充套件迴圈

相比之下在迴圈中

,判斷和增值運算比乙個簡單的賦值語句要費時

,於是可以這樣進行賦值

:for i:=1 to 1000 do

begin

a[i]:=1;

a[i+1]:=1;

a[i+2]:=1;

a[i+3]:=1;

i:=i+4;

end;

這樣就可以減少判斷和增值運算

3/4.

但是這種方法也要適可而止不要寫上

100個賦值語句來讓迴圈只有10次

.在多層前套迴圈中應將迴圈數值大的放在內迴圈中

,迴圈數值小的放在外面

,這樣也可以提高程式執行效率

.還要將於迴圈無關的判斷等操作放在迴圈的外面完成.4.

對於陣列的訪問優化

我們知道計算機存放陣列永遠都是一維的

,多維陣列只是語言上面的約定

,是為了易讀易寫而設定的,根據

pascal

的約定,

陣列的存放順序是

:後繼元素的下標增量從右到左的

.以陣列x為例

,x的順序是

x[1,1]

對應的位址是

1x[1,2]

對應的位址是

2****

對應的位址是

**x[1,500]

對應的位址是

500x[2,1]

對應的位址是

501x[2,2]

對應的位址是

502****

對應的位址是

**x[20,500]

對應的位址是

10000

如果我們存陣列的順序是按照

x[1,1],x[2,1],x[3,1]…..

的順序的時候

,所訪問的位址為

1,501,1001…...

但是資料在機器裡面存放是按照

2kb為乙個分頁的

,因此當定址加上標值的位移量時還要查頁碼

,反覆查頁碼會耗費時間

,所以當元素較多的時候應盡可能的按照順序安排計算

.

劍指offer 優化時間與空間效率

把只包含因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。coding utf 8 class solution def getuglynumber solution self,ind...

待優化,時間超限 1207

判斷陣列是否所有值均為0,即敵人被全部消滅 intdie blood a,int n 檢查是否有敵人被消滅 if flag 1 return1 else return0 int main while empty a,n 當敵人未被全部消滅時,開槍 printf d n cnt return0 第二種...

js格式化時間的方法

js格式化時間的方法 對date的擴充套件,將 date 轉化為指定格式的string 月 m 日 d 小時 h 分 m 秒 s 季度 q 可以用 1 2 個佔位符,年 y 可以用 1 4 個佔位符,毫秒 s 只能用 1 個佔位符 是 1 3 位的數字 例子 new date format yyyy...