神奇的函數緩存.媽媽再也不用擔心遞歸類函數跑不快了

神奇的函數緩存.媽媽再也不用擔心遞歸類函數跑不快了.

原作者:祁宇.ppt下載地址:在此
真的非常神奇!

<型名 R,型名...A>
函數<R(A...)>緩存(R(*)(A...)){
    靜 映<元組<A...>,R>;
    打印("啊",.大小());[=](A...o){//這是最後執行的函數
        元組<A...>t(o...);動 m=.查找(t);(m==.())[t]=(o...);
        打印("啊",.大小());
        中 啊[t];
    };//[=]不能換,*一換就出錯*,必須要把所有指針傳出去,所以,要用=號,否則要出問題
    //一直用的是這個內部函數,同一個函數.所以啊0只打印了一次
}//返回的是f函數,這個玩意兒還是高級貨非常厲害的<型名 R,型名...A>
動 快計(R(*)(A...)){//每一個函數都保存了的
    用 函=函數<R(A...)>;靜 無序映<推導(),>;
    動 p=.查找();(p==.())(,,緩存());//就是這裏
    //打印("呀",呀.大小());//通過這裏可以知道,這裏只緩衝了一個,所以沒必要用無序映.
    中 呀[];
    //針,變成緩存針了,對不,這個p還沒變化
    //查到針的,然後壓進去了.每次在緩存這裏變化
    //直接返回的呀[針]
}//返回的是函數,這個函數針與參數結合,返回已存儲值
//多適用於函數不變,參數不變的遞歸函數
//快計,快速計算.有緩衝的計算

測試:

f(整 i){(i<2)?i:f(i-1)+f(i-2);}g(整 i){(i<2)?i:快計(g)(i-1)+快計(g)(i-2);
}

空 測試1(){
    計時器 t;
    整 n=g(38);
    輸出<<n;
    t.();
}//開始還懷疑出錯了.
空 測試(){
    計時器 t;
    整 n=f(38);
    輸出<<n;
    t.();
}

空 主(){
    測試();
    測試1();
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章