我們以經典的遞迴求斐波那契數列為例,眾所周知,遞迴是比較消耗記憶體的,且效率比較低,我們通過普通方法和加入記憶體快取的方法作對比。
先來看看普通方法。
package main
import
("fmt"
"time"
)func
fibonacci
(a int
)(result int
)//開始遞迴,前乙個數加後乙個數,一直呼叫,直到出口為止
result=
fibonacci
(a-1)+
fibonacci
(a-2
)return
}func
main()
經我這台渣渣筆記本測試,此方法求第45位所需時間為7.1s
2018.11月更新
上面的**已經過時了,最近又學了一招,通過加記憶體快取的方法實現快速遞迴求斐波那契數列。
這種方法避免了重複計算,經測試,可以將上面的**速度提公升四千倍左右。不多說,直接上**。
package main
import
("fmt"
"time"
)const lim =
45var fibs [lim]
uint64
func
fibonacci
(n int
)(res uint64
)if n <=
1else
//計算完畢,加入快取中,以備下次之需
fibs[n]
= res
return
}func
main()
end := time.
now(
) delta := end.
sub(start)
fmt.
printf
("longcalculation took this amount of time: %s\n"
, delta)
}
經我這台渣渣電腦測試,求第45位數列的值所用時間約等於0.
可見速率提公升了不是一點點。
總結
記憶體快取的技術在使用計算成本相對昂貴的函式時非常有用(不僅限於例子中的遞迴),譬如大量進行相同引數的運算。這種技術還可以應用於純函式中,
即相同輸入必定獲得相同輸出的函式。
一些加快 程式執行速度的方法
程式的執行時間是各位oier最頭疼的限制之一,只要你運用如下演算法,相信程式的執行時間會有巨大的改觀 pragma gcc optimize 2 把這一句話放到程式的最開頭即可實現 考慮到部分題目的n或m較大,相對應的n行m列的讀入規模就會非常大,一般來說,用scanf流比cin流更快一些 因為ci...
通過推理加快計算機視覺應用的執行速度
推理引擎要求將該模型轉化成 ir 中間 檔案。本教程將詳細介紹如何使用 model optimizer 提取現有模型 googlenet 並將其轉化成 ir 中間 檔案。推理引擎提取神經網路模型的表示並對其進行優化,以在 cpu 中充分利用高階英特爾 指令集,並使其相容其他硬體加速器 gpu 和 f...
使用Map作為快取,提公升程式執行速度
最近在工作的過程中,新學到了使用hashmap作為程式的快取,感覺很棒,特此記錄下來 private string getbudgetagencyname string budgetagencycode,mapbudgetagencymap,string sysyear,string sysmont...