日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

数据结构-记忆化搜索讲解

發(fā)布時(shí)間:2025/3/21 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构-记忆化搜索讲解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

算法:記憶化搜索算法

一:簡(jiǎn)述

記憶化搜索實(shí)際上是遞歸來(lái)實(shí)現(xiàn)的,但是遞歸的過程中有許多的結(jié)果是被反復(fù)計(jì)算的,這樣會(huì)大大降低算法的執(zhí)行效率。

而記憶化搜索是在遞歸的過程中,將已經(jīng)計(jì)算出來(lái)的結(jié)果保存起來(lái),當(dāng)之后的計(jì)算用到的時(shí)候直接取出結(jié)果,避免重復(fù)運(yùn)算,因此極大的提高了算法的效率。

二:應(yīng)用實(shí)例

題目描述
對(duì)于一個(gè)遞歸函數(shù)w(a,b,c)

如果 a<=0 or b<=0 or c<=0 就返回值1.
如果 a>20 or b>20 or c>20就返回w(20,20,20)
如果 a<b并且b<c 就返回w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c)
其它的情況就返回w(a-1,b,c)+w(a-1,b-1,c)+w(a-1,b,c-1)-w(a-1,b-1,c-1)
這是個(gè)簡(jiǎn)單的遞歸函數(shù),但實(shí)現(xiàn)起來(lái)可能會(huì)有些問題。當(dāng)a,b,c均為15時(shí),調(diào)用的次數(shù)將非常的多。你要想個(gè)辦法才行.

/* absi2011 : 比如 w(30,-1,0)既滿足條件1又滿足條件2

這種時(shí)候我們就按最上面的條件來(lái)算

所以答案為1

*/

輸入輸出格式
輸入格式:

會(huì)有若干行。

并以-1,-1,-1結(jié)束。

保證輸入的數(shù)在[-9223372036854775808,9223372036854775807]之間,并且是整數(shù)。

輸出格式:

輸出若干行,每一行格式:

w(a, b, c) = ans

注意空格。

輸入輸出樣例

輸入樣例#1:
1 1 1
2 2 2
-1 -1 -1

輸出樣例#1:
w(1, 1, 1) = 2
w(2, 2, 2) = 4

這是一個(gè)非常經(jīng)典的記憶化搜索的題目。
  拿到這個(gè)題,首先可以想到的就是遞歸的方法,看上去用遞歸可以輕而易舉的解決。但是遞歸的開銷是不一般的大。下面先給大家

#include<iostream> #include<cstdio> #include <time.h> //用來(lái)記時(shí) using namespace std; clock_t start, finish; double duration;typedef long long ll; ll f[30][30][30];int w(ll a, ll b, ll c){ //遞歸的函數(shù) if(a<=0||b<=0||c<=0){return 1;}else if(a>20||b>20||c>20){return w(20,20,20);}else if(a<b&&b<c){return w(a,b,c-1) + w(a,b-1,c-1) - w(a,b-1,c);}else{return w(a-1,b,c)+w(a-1,b-1,c)+w(a-1,b,c-1)-w(a-1,b-1,c-1);} }int main(){ll a, b, c;while(1){cin >> a >> b >> c;start = clock(); //開始計(jì)時(shí) if(a==-1&&b==-1&&c==-1) return 0;else{printf("w(%lld, %lld, %lld) = %d\n", a, b, c, w(a, b, c));finish = clock(); //結(jié)束記時(shí) duration = (double)(finish - start) / CLOCKS_PER_SEC; //計(jì)算持續(xù)時(shí)間 printf( "%f seconds\n", duration );}}return 0; }

運(yùn)行結(jié)果:

記憶化搜索解法

開辟一個(gè)數(shù)組 f[][][],用來(lái)存儲(chǔ)計(jì)算出來(lái)的結(jié)果。

關(guān)于數(shù)組的大小:因?yàn)轭}目中給出了一個(gè)條件 “ 如果 a>20 or b>20 or c>20就返回w(20,20,20) ” 那么數(shù)組只要最小開到 f[21][21][21]就夠用了。

具體的步驟看代碼中的注解。

#include<iostream> #include<cstdio> #include <time.h> using namespace std; clock_t start, finish; double duration;typedef long long ll; ll f[30][30][30];int w(ll a, ll b, ll c){if(a<=0||b<=0||c<=0){return 1;}else if(a>20||b>20||c>20){return w(20,20,20);}else if(f[a][b][c]!=0)return f[a][b][c]; //如果之前被計(jì)算過,那么直接返回存在數(shù)組中的結(jié)果 //沒有計(jì)算過的,就進(jìn)行的計(jì)算 else if(a<b&&b<c){ f[a][b][c] = w(a,b,c-1) + w(a,b-1,c-1) - w(a,b-1,c);}else{f[a][b][c]=w(a-1,b,c)+w(a-1,b-1,c)+w(a-1,b,c-1)-w(a-1,b-1,c-1);}return f[a][b][c]; //計(jì)算完畢之后返回計(jì)算出的結(jié)果 }int main(){ll a, b, c;while(1){cin >> a >> b >> c;start = clock(); //開始計(jì)時(shí) if(a==-1&&b==-1&&c==-1) return 0;else{printf("w(%lld, %lld, %lld) = %d\n", a, b, c, w(a, b, c));finish = clock(); //結(jié)束記時(shí) duration = (double)(finish - start) / CLOCKS_PER_SEC; //計(jì)算持續(xù)時(shí)間 printf( "%f seconds\n", duration );} }return 0; }

運(yùn)行結(jié)果

大家和遞歸的運(yùn)行時(shí)間對(duì)比一下就可以看出,當(dāng)遞歸的次數(shù)多了之后,效率要高出很多。

大家和遞歸的運(yùn)行時(shí)間對(duì)比一下就可以看出,當(dāng)遞歸的次數(shù)多了之后,效率要高出很多。

三:總結(jié)過程

根據(jù)上面的題,可以總結(jié)一個(gè)記憶化搜索的過程。

f(problem p){if(p has been solved){return the result }else{divide the p into some sub-problems (p1, p2, p3...)f(p1);f(p2);f(p3);...}

總結(jié)

以上是生活随笔為你收集整理的数据结构-记忆化搜索讲解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 综合久久国产 | 欧美xxxx×黑人性爽 | 影音先锋成人资源站 | 久久久久久久久久一级 | 国产老头和老头xxxx× | 国产精品第一区 | 好妞色妞国产在线视频 | 欧美精品一区二区不卡 | 美女极度色诱图片www视频 | 日韩精品视频一区二区三区 | 麻豆视频免费在线观看 | 午夜伦情 | 日本二区三区视频 | 91麻豆精品一区二区三区 | 欧亚成人av | 亚洲国产天堂av | 日本极品喷水 | 国产免费高清av | 丁香婷婷深情五月亚洲 | 欧美性生话 | 日本黄网站色大片免费观看 | 久久国产这里只有精品 | 色婷婷婷婷| 黄色av网站免费在线观看 | 黄色自拍视频 | 在线观看视频毛片 | 欧美视频综合 | av在线三区 | 老熟妇仑乱一区二区视频 | 91性视频| 久久久久久久久久久99 | 国产无套内射普通话对白 | 欧美xxxx18国产 | 亚洲五月婷婷 | 免费看av网| 婷婷亚洲综合五月天小说 | 一本色道综合久久欧美日韩精品 | 日本中文在线视频 | 蜜桃色一区二区三区 | 国产精品久久久久野外 | 五月天激情影院 | xxxx18国产| 大桥未久恸哭の女教师 | 欧美一区精品 | 一个色的综合 | 成人久久视频 | 不卡日韩 | 97人妻精品一区二区 | 日韩片在线观看 | 国产亚洲不卡 | 欧美人xxxx| 老女人毛片50一60岁 | 亚洲人高潮女人毛茸茸 | 亚洲欧美综合一区二区 | 日本特级片 | 亚洲国产欧美精品 | 朝桐光一区二区三区 | 国产精品无码专区av在线播放 | 白浆四溢 | 伊人日日夜夜 | 999福利视频 | 亚洲三级免费观看 | 男人的天堂黄色 | 亚洲欧美色视频 | 四级黄色片| 性一交一乱一色一免费无遮挡 | 国内av在线播放 | 欧美人与物videos另类 | 顶级尤物极品女神福利视频 | 国内少妇精品 | 成年人免费在线观看网站 | 香蕉国产精品视频 | 玉足调教丨vk24分钟 | 久久香蕉热 | 91视频在| av少妇在线 | 麻豆网站在线观看 | 亚洲污污视频 | 亚洲午夜精品一区二区 | 中文字幕超清在线免费观看 | 中文字幕蜜桃 | 一区二区三区四区五区在线视频 | 国产一级久久久 | 亚洲精品一区久久久久久 | 亚洲视频一区在线 | 日韩欧美在线观看免费 | 国产无遮挡裸体免费视频 | 一区二区在线精品 | 成人合集 | 久久亚洲AV无码精品 | 中国一级特黄毛片大片 | 三级色网| 99精品欧美一区二区蜜桃免费 | 日本xxxxxⅹxxxx69| 国产精品黄色网 | 国产第一页精品 | 男女猛烈无遮挡免费视频 | 91av视频网站 | 欧美另类视频 |