acm上曾經(jīng)做過一個(gè)類似的段子。記不清了,大概想一下。
成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供華鎣網(wǎng)站建設(shè)、華鎣做網(wǎng)站、華鎣網(wǎng)站設(shè)計(jì)、華鎣網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、華鎣企業(yè)網(wǎng)站模板建站服務(wù),十余年華鎣做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
這里為什么是place=x+y*10000;呢,是你隨便寫的還是與生產(chǎn)實(shí)際相關(guān)。如果是place=x*y;就顯而易見了。
下面鏈接是完全二叉樹的java實(shí)現(xiàn),網(wǎng)上找的,我也沒細(xì)看。
你這個(gè)問題,我說一個(gè)“創(chuàng)新”點(diǎn)的想法,哈哈,或許能激發(fā)你的思考。
先說邏輯上:
可以用一個(gè)二維數(shù)組,如A[][],每個(gè)元素存放A類的對(duì)象,如何定位呢,就根據(jù)x、y的值,正好是一對(duì)坐標(biāo),在二維上標(biāo)定了一個(gè)位置,這個(gè)位置就放該A類對(duì)象。放心,這個(gè)數(shù)組不會(huì)占用太多的內(nèi)存,幾MB頂多了,這也是我看你說明了x、y的范圍得到的啟發(fā),這樣,創(chuàng)建數(shù)組時(shí)就可以指定大小。查找時(shí),直觀些的方法就是掃描,你找x最大的,那就順著x軸從右往左掃,掃到的第一個(gè)A類對(duì)象就是目標(biāo)。掃4個(gè)方向你需要的4個(gè)極值就都出來了。
數(shù)據(jù)結(jié)構(gòu)上:
當(dāng)然你就用數(shù)組這種結(jié)構(gòu)就ok的,如果你按照?qǐng)D去處理,也可以用鄰接矩陣或者鄰接鏈表,從本質(zhì)上說,就是你人為地對(duì)二維數(shù)組進(jìn)行了優(yōu)化,強(qiáng)化了“掃描”(查找)過程的效率,或者你自己稍微寫個(gè)高效些的針對(duì)你這個(gè)項(xiàng)目的查找算法。
多說一句,如果place=x*y;的話,明顯就是面積,掃描過之后就會(huì)圈出一個(gè)區(qū)域來,是一個(gè)圖,然后對(duì)圖再進(jìn)行操作,會(huì)很容易解決后續(xù)的問題(你不可能僅找到4個(gè)極值就結(jié)束了吧)。
增刪節(jié)點(diǎn)的話,就把該位置上的A對(duì)象賦空就可以了,相當(dāng)于刪除,新增則相反。然后重新啟動(dòng)掃描算法。
節(jié)選自維基百科:
啟發(fā)法 ( heuristics ,源自古希臘語的ε?ρ?σκω,又譯作:策略法、助發(fā)現(xiàn)法、啟發(fā)力、捷思法)是指 依據(jù)有限的知識(shí) (或“不完整的信息”)在短時(shí)間內(nèi)找到問題解決方案的一種技術(shù)。
它是一種依據(jù) 關(guān)于系統(tǒng)的有限認(rèn)知 和 假說 從而得到關(guān)于此系統(tǒng)的結(jié)論的分析行為。由此得到的解決方案有可能會(huì)偏離最佳方案。通過與最佳方案的對(duì)比,可以確保啟發(fā)法的質(zhì)量。
計(jì)算機(jī)科學(xué)的兩大基礎(chǔ)目標(biāo),就是 發(fā)現(xiàn)可證明其運(yùn)行效率良好 且可 得最佳解或次佳解 的算法。
而啟發(fā)式算法則 試圖一次提供一個(gè)或全部目標(biāo) 。例如它常能發(fā)現(xiàn)很不錯(cuò)的解, 但也沒辦法證明它不會(huì)得到較壞的解 ; 它通??稍诤侠頃r(shí)間解出答案,但也沒辦法知道它是否每次都可以這樣的速度求解。
有時(shí)候人們會(huì)發(fā)現(xiàn)在某些特殊情況下,啟發(fā)式算法會(huì)得到很壞的答案或效率極差, 然而造成那些特殊情況的數(shù)據(jù)結(jié)構(gòu),也許永遠(yuǎn)不會(huì)在現(xiàn)實(shí)世界出現(xiàn) 。
因此現(xiàn)實(shí)世界中啟發(fā)式算法很常用來解決問題。啟發(fā)式算法處理許多實(shí)際問題時(shí)通常可以在合理時(shí)間內(nèi)得到不錯(cuò)的答案。
有一類的 通用啟發(fā)式策略稱為元啟發(fā)式算法(metaheuristic) ,通常使用隨機(jī)數(shù)搜索技巧。他們可以應(yīng)用在非常廣泛的問題上,但不能保證效率。
節(jié)選自百度百科:
啟發(fā)式算法可以這樣定義:一個(gè) 基于直觀或經(jīng)驗(yàn)構(gòu)造 的算法, 在 可接受的花費(fèi)(指計(jì)算時(shí)間和空間)下給出待解決組合優(yōu)化問題每一個(gè)實(shí)例的一個(gè)可行解 , 該可行解與最優(yōu)解的偏離程度一般不能被預(yù)計(jì)。 現(xiàn)階段,啟發(fā)式算法以仿自然體算法為主,主要有蟻群算法、模擬退火法、神經(jīng)網(wǎng)絡(luò)等。
目前比較通用的啟發(fā)式算法一般有模擬退火算法(SA)、遺傳算法(GA)、蟻群算法(ACO)。
模擬退火算法(Simulated Annealing, SA)的思想借鑒于固體的退火原理,當(dāng)固體的溫度很高的時(shí)候,內(nèi)能比較大,固體的內(nèi)部粒子處于快速無序運(yùn)動(dòng),當(dāng)溫度慢慢降低的過程中,固體的內(nèi)能減小,粒子的慢慢趨于有序,最終,當(dāng)固體處于常溫時(shí),內(nèi)能達(dá)到最小,此時(shí),粒子最為穩(wěn)定。模擬退火算法便是基于這樣的原理設(shè)計(jì)而成。
求解給定函數(shù)的最小值:其中,0=x=100,給定任意y的值,求解x為多少的時(shí)候,F(xiàn)(x)最???
遺傳算法(Genetic Algorithm, GA)起源于對(duì)生物系統(tǒng)所進(jìn)行的計(jì)算機(jī)模擬研究。它是模仿自然界生物進(jìn)化機(jī)制發(fā)展起來的隨機(jī)全局搜索和優(yōu)化方法,借鑒了達(dá)爾文的進(jìn)化論和孟德爾的遺傳學(xué)說。其本質(zhì)是一種 高效、并行、全局搜索 的方法,能在搜索過程中自動(dòng)獲取和積累有關(guān)搜索空間的知識(shí),并 自適應(yīng) 地控制搜索過程以求得最佳解。
給定一組五個(gè)基因,每一個(gè)基因可以保存一個(gè)二進(jìn)制值 0 或 1。這里的適應(yīng)度是基因組中 1 的數(shù)量。如果基因組內(nèi)共有五個(gè) 1,則該個(gè)體適應(yīng)度達(dá)到最大值。如果基因組內(nèi)沒有 1,那么個(gè)體的適應(yīng)度達(dá)到最小值。該遺傳算法希望 最大化適應(yīng)度 ,并提供適應(yīng)度達(dá)到最大的個(gè)體所組成的群體。
想象有一只螞蟻找到了食物,那么它就需要將這個(gè)食物待會(huì)螞蟻穴。對(duì)于這只螞蟻來說,它并不知道應(yīng)該怎么回到螞蟻穴。
這只螞蟻有可能會(huì)隨機(jī)選擇一條路線,這條路可能路程比較遠(yuǎn),但是這只螞蟻在這條路上留下了記號(hào)(一種化學(xué)物質(zhì),信息素)。如果這只螞蟻繼續(xù)不停地搬運(yùn)食物的時(shí)候,有其它許多螞蟻一起搬運(yùn)的話,它們總會(huì)有運(yùn)氣好的時(shí)候走到更快返回螞蟻穴的路線。當(dāng)螞蟻選擇的路線越優(yōu),相同時(shí)間內(nèi)螞蟻往返的次數(shù)就會(huì)越多,這樣就在這條路上留下了更多的信息素。
這時(shí)候,螞蟻們就會(huì)選擇一些路徑上信息素越濃的,這些路徑就是較優(yōu)的路徑。當(dāng)螞蟻們不斷重復(fù)這個(gè)過程,螞蟻們就會(huì)更多地向更濃的信息素的路徑上偏移,這樣最終會(huì)確定一條路徑,這條路徑就是最優(yōu)路徑。
啟發(fā)式算法與元啟發(fā)式算法對(duì)區(qū)別在于是否存在“隨機(jī)因素”。 對(duì)一個(gè)同樣的問題,啟發(fā)式算法(heuristics)只要給定了一個(gè)輸入,那么算法執(zhí)行的步驟就固定下來了,輸出也因此固定,多次運(yùn)算結(jié)果保持一致。
而元啟發(fā)式算法(meta-h(huán)euristics)里面包括了隨機(jī)因素,如GA中的交叉因子,模擬退火中的metropolis準(zhǔn)則,這些隨機(jī)因素也使得算法有一定概率跳出局部最優(yōu)解而去嘗試全局最優(yōu)解,因此元啟發(fā)式算法在固定的輸入下,而輸出是不固定的。
啟發(fā)式算法(Heuristic Algorigthm)是一種基于直觀或經(jīng)驗(yàn)構(gòu)造的算法,在可接受的花費(fèi)(指計(jì)算時(shí)間、計(jì)算空間等)給出待解決優(yōu)化問題的每一實(shí)例的一個(gè)可行解,該可行解與與最優(yōu)解的偏離程度一般不可以事先預(yù)計(jì)。
啟發(fā)式算法是一種技術(shù),這種算法可以在可接受的計(jì)算費(fèi)用內(nèi)找到最好的解,但不一定能保證所得到解的可行性及最優(yōu)性,甚至大多數(shù)情況下無法闡述所得解與最優(yōu)解之間的近似程度。
元啟發(fā)式算法(MetaHeuristic Algorigthm)是啟發(fā)式算法的改進(jìn),它是隨機(jī)算法與局部搜索算法相結(jié)合的產(chǎn)物,常見的啟發(fā)式算法包括遺傳算法、模擬退火算法、禁忌搜索算法及神經(jīng)網(wǎng)絡(luò)算法等。
新興的元啟發(fā)式算法有、粒子群優(yōu)化算法、差分進(jìn)化算法,蟻群優(yōu)化算法、螢火蟲算法、布谷鳥算法、和聲搜索算法、差分進(jìn)化算法、隨機(jī)蛙跳算法、細(xì)菌覓食算法、蝙蝠算法的算法等。
分享標(biāo)題:元啟發(fā)式算法代碼java 元啟發(fā)式算法和啟發(fā)式算法區(qū)別
URL分享:http://aaarwkj.com/article0/hhpdio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、網(wǎng)站收錄、網(wǎng)頁(yè)設(shè)計(jì)公司、App設(shè)計(jì)、企業(yè)網(wǎng)站制作、營(yíng)銷型網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容