IDA*-洛谷P1379 八数码难题
https://daniu.luogu.org/problem/show?pid=1379
省選的收獲
暗金
學(xué)會(huì)了A*啦啦啦;
我在第一天學(xué)了A*;
然后回家頹廢之余思考思考;
又問了van爺一些小問題;
然后就在fop_zz的 支持 嘲笑下AC了;
A*一開始感覺會(huì)很深?yuàn)W;
然而就是一個(gè)剪枝而已;
呵呵呵;
這里又一個(gè)估價(jià)函數(shù);
當(dāng)前狀態(tài)的估價(jià)函數(shù)是當(dāng)前在狀態(tài)理想情況下到達(dá)目標(biāo)狀態(tài)的代價(jià);
比如我們現(xiàn)在走了g步;
估價(jià)為H步;
然后我們迭代加深枚舉的k步(k從0開始枚舉,所以我們要預(yù)先特判無解情況,當(dāng)然可以掐秒);
如果g+H>k;
顯然萎了;
就是這么簡單;
至于為什么A*是dfs不是bfs;
因?yàn)閎fs沒有一個(gè)確定的k;
而dfs的k我們是枚舉的;
至于這樣的話有很多的重復(fù);
因?yàn)榧偃绱鸢甘?;
那么k=0~3時(shí)的搜索是無用的;
但是在這道題目里面顯然k不是很大;
而且加入k=ans爆搜的時(shí)間復(fù)雜度是n;
那么k=0~ans的時(shí)間復(fù)雜度類似與n*n;
雖然這樣,還是比直接暴力好;
那我們可不可以把k-1的所有g(shù)==k,g==k-1的狀態(tài)存下來呢;
好像很麻煩欸;
當(dāng)然樓k我們可以二分;
至于為什么我枚舉的變量是tf;
用來紀(jì)念我ZJOI2017的頹廢;
轉(zhuǎn)載于:https://www.cnblogs.com/largecube233/p/6797886.html
總結(jié)
以上是生活随笔為你收集整理的IDA*-洛谷P1379 八数码难题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 02 - Unit07:显示笔记下拉菜单
- 下一篇: oracle数据导入-dblink方式