01 故事起源有一天小K去滑雪,雪山高低不平,當(dāng)然小K只能從高的地方向低的地方滑,那如何選擇路線才能滑的最遠呢? 把這個問題抽象描述如下:
在一個二維地圖中,數(shù)值代表此處山的高度,在某個點只能滑向上下左右4個相鄰的點,最遠的滑行路線,也就等價于找出一條最長的數(shù)值下降路線。
比如下圖中的紅色路線就是此時最長的一條路線,長度為10。那要如何找出這樣的一條路線呢?
![64a37f7a-eb88-11ec-ba43-dac502259ad0.jpg](https://file1.elecfans.com//web2/M00/95/78/wKgZomTnApaAC9FkAACBtv6xR9I149.jpg)
![64b7b616-eb88-11ec-ba43-dac502259ad0.jpg](https://file1.elecfans.com//web2/M00/95/78/wKgZomTnApaAGcFuAABJAG3rd60680.jpg)
![64ff5ffc-eb88-11ec-ba43-dac502259ad0.jpg](https://file1.elecfans.com//web2/M00/95/78/wKgZomTnApaAe1MVAACNrnZj0tY834.jpg)
![65127cb8-eb88-11ec-ba43-dac502259ad0.jpg](https://file1.elecfans.com//web2/M00/95/78/wKgZomTnApaAFR6BAACazfoLJa8806.jpg)
那就有了初步的框架了,從每一個起點出發(fā),把可行的路線都找出來,也就是能走的路線都走一遍,再比較全局最優(yōu)的就行了,而且這也正好符合深搜的算法框架。偽代碼
intfind(inti,intj){ //向4個方向嘗試 for(i=0->3){ if(ok){ returnfind(next)+1 } } } intmain(){ for(i=0->n){ for(j=0->m) { t=find(i,j) ans=max(ans,t) } } } 03 問題上面的做法可以得到最優(yōu)解,但有一個問題。如下例,以15為起點的時候,會嘗試把6->5->4->3->2->1走一遍。但以16為起點的時候,還會嘗試把這條路線走一遍,這就會導(dǎo)致大量的重復(fù)計算。
![653bb826-eb88-11ec-ba43-dac502259ad0.jpg](https://file1.elecfans.com//web2/M00/95/78/wKgZomTnApaAPL76AACG1OSuitE764.jpg)
![6544aac6-eb88-11ec-ba43-dac502259ad0.jpg](https://file1.elecfans.com//web2/M00/95/78/wKgZomTnApeAH9sJAADOlIGfAJQ648.jpg)
![659bca36-eb88-11ec-ba43-dac502259ad0.jpg](https://file1.elecfans.com//web2/M00/95/78/wKgZomTnApeADsQFAADW3GXKWoI183.jpg)
intfind(vector<vector<int>>&snowMountain,vector<vector<int>>&f,inti,intj,intr,intc){ intx,y; if(f[i][j]!=-1) returnf[i][j]; f[i][j]=1; for(intk=0;k4;k++){ x=i+direction[k][0]; y=j+direction[k][1]; //validdirection if(x>=0&&x=0&&ysnowMountain[x][y]){ f[i][j]=maxOfTwo(f[i][j],find(snowMountain,f,x,y,r,c)+1); } } returnf[i][j]; }main函數(shù)
intmain(){ ifstreamfin("a.in"); ofstreamfout("a.out"); inti,j,r,c,maxHeight=0; fin>>r>>c; vector<vector<int>>snowMountain(r,vector<int>(c,0)); vector<vector<int>>f(r,vector<int>(c,-1)); for(i=0;ifor(j=0;j>snowMountain[i][j]; for(i=0;ifor(j=0;jendl; fin.close(); fout.close(); return0; } 06 總結(jié)記憶化搜索是一種非常實用的算法,因為深搜用遞歸很容易實現(xiàn),記憶化又避免了重復(fù)子問題的計算,提高了運行效率。 這其實就是動態(tài)規(guī)劃的思想,常見的動態(tài)規(guī)劃用遞推實現(xiàn),相比記憶化搜索實現(xiàn)上會更難一點,而記憶化搜索就沒有這個問題。 算法的適用場景也需要根據(jù)具體的問題來分析,一般常用在地圖或者樹型結(jié)構(gòu)中。 審核編輯 :李倩
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
算法
+關(guān)注
關(guān)注
23文章
4631瀏覽量
93427 -
代碼
+關(guān)注
關(guān)注
30文章
4837瀏覽量
69128
原文標(biāo)題:啥是記憶化搜索?
文章出處:【微信號:TheAlgorithm,微信公眾號:算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
記憶示波器的原理和應(yīng)用
記憶示波器是一種基于數(shù)字處理原理的測量儀器,其原理和應(yīng)用可以從以下幾個方面進行詳細介紹:一、記憶示波器的原理
核心組件:記憶示波器的核心是
發(fā)表于 01-06 15:50
一種面向飛行試驗的數(shù)據(jù)融合框架
天地氣動數(shù)據(jù)一致性,針對某外形飛行試驗數(shù)據(jù)開展了典型對象的天地氣動數(shù)據(jù)融合方法研究。結(jié)合數(shù)據(jù)挖掘的隨機森林方法,本文提出了一種面向飛行試驗的數(shù)據(jù)融合框架,通過引入地面風(fēng)洞試驗氣動數(shù)據(jù),
![<b class='flag-5'>一種</b>面向飛行試驗的數(shù)據(jù)融合框架](https://file1.elecfans.com/web3/M00/00/1A/wKgZPGdGk8-ABnxHAABN_-2O8AQ544.png)
一種創(chuàng)新的動態(tài)軌跡預(yù)測方法
本文提出了一種動態(tài)軌跡預(yù)測方法,通過結(jié)合歷史幀和歷史預(yù)測結(jié)果來提高預(yù)測的穩(wěn)定性和準(zhǔn)確性。它引入了歷史預(yù)測注意力模塊,以編碼連續(xù)預(yù)測之間的動態(tài)關(guān)系,并通過三重因子注意力模塊實現(xiàn)了最先進的性能。本方法能夠生成準(zhǔn)確且穩(wěn)定的未來軌跡,這
![<b class='flag-5'>一種</b>創(chuàng)新的動態(tài)軌跡預(yù)測<b class='flag-5'>方法</b>](https://file1.elecfans.com/web2/M00/0B/46/wKgaomcfMJmAXFYrAAEzgGcXUbU308.jpg)
一種基于光強度相關(guān)反饋的波前整形方法
基于反饋的波前整形通過散射介質(zhì)聚焦光是一種成熟的方法。在傳統(tǒng)的基于反饋的波前整形中,入射光被分成N個輸入模式,這些模式由空間光調(diào)制器(SLM)使用N個段進行調(diào)制,每個段具有相同數(shù)量和大小的像素
![<b class='flag-5'>一種</b>基于光強度相關(guān)反饋的波前整形<b class='flag-5'>方法</b>](https://file1.elecfans.com/web2/M00/0B/3D/wKgaomcd-maAR2liAAAIzDC2aQU423.jpg)
谷歌取消“站點鏈接搜索框”,適應(yīng)新搜索需求
功能的取消似乎并未對用戶產(chǎn)生太大影響。 在當(dāng)下這個信息快速更新的時代,人們不斷嘗試和探索新的搜索方式和工具,以獲取更加精準(zhǔn)和全面的信息。谷歌的這一決定,或許正是其適應(yīng)新時代用戶需求的一種體現(xiàn)。 同時,谷歌也在
BitEnergy AI公司開發(fā)出一種新AI處理方法
BitEnergy AI公司,一家專注于人工智能(AI)推理技術(shù)的企業(yè),其工程師團隊創(chuàng)新性地開發(fā)了一種名為線性復(fù)雜度乘法(L-Mul)的AI處理方法。該方法的核心在于,它用整數(shù)加法替代
一種無透鏡成像的新方法
使用OAM-HHG EUV光束對高度周期性結(jié)構(gòu)進行成像的EUV聚光顯微鏡 為了研究微電子或光子元件中的納米級圖案,一種基于無透鏡成像的新方法可以實現(xiàn)近乎完美的高分辨率顯微鏡。 層析成像是一種強大的無
![<b class='flag-5'>一種</b>無透鏡成像的新<b class='flag-5'>方法</b>](https://file1.elecfans.com//web2/M00/FD/50/wKgZomaZlSKAXJd7AAD91lO42tY599.jpg)
rup是一種什么模型
部分)開發(fā)的,它基于統(tǒng)一建模語言(UML)和面向?qū)ο蟮能浖_發(fā)方法。RUP提供了一種結(jié)構(gòu)化的方法來開發(fā)軟件,它包括
機械自動化是自動化的一種嗎
引言 自動化技術(shù)是指利用控制裝置對生產(chǎn)過程進行控制,以實現(xiàn)生產(chǎn)過程的自動化。機械自動化是自動化技術(shù)的一種,它主要涉及到使用機械設(shè)備和控制系統(tǒng)
plc是一種什么的電子裝置
PLC(Programmable Logic Controller,可編程邏輯控制器)是一種廣泛應(yīng)用于工業(yè)自動化領(lǐng)域的電子裝置。它具有高度的靈活性和可靠性,能夠?qū)崿F(xiàn)各種復(fù)雜的控制任務(wù)。本文將詳細介紹
基于助聽器開發(fā)的一種高效的語音增強神經(jīng)網(wǎng)絡(luò)
SRAM。我們使用Mbed OS[12]和CMSIS內(nèi)核[13,14]。表1總結(jié)了SE模型約束。
在本工作中,我們提出了一種方法來生成滿足表1要求的優(yōu)化RNN SE模型。首先,我們演示了對SE
發(fā)表于 06-07 11:29
一種利用光致Lamb波對微米級顆粒進行大通量操控的光聲圖案化方法
近日,北京理工大學(xué)李鋒教授聯(lián)合華南理工大學(xué)李志遠教授與中央民族大學(xué)郭紅蓮教授提出了一種利用光致Lamb波在空氣中對微米級顆粒進行大通量操控的光聲圖案化方法。
![<b class='flag-5'>一種</b>利用光致Lamb波對微米級顆粒進行大通量操控的光聲圖案<b class='flag-5'>化</b><b class='flag-5'>方法</b>](https://file1.elecfans.com/web2/M00/D9/D2/wKgaomYprvGAdQNvAAAa9Vg-rYM774.jpg)
什么電路具有記憶功能 時序電路是不含有記憶功能的器件對嗎
觸發(fā)器等特定的電路元件來實現(xiàn)記憶功能。以下會詳細介紹幾種具有記憶功能的電路。 1. 存儲器:存儲器是一種具有記憶功能的電路元件,用于存儲和檢索數(shù)據(jù)。存儲器可以分為隨機存取存儲器(RAM
評論