迪杰斯特拉算法的本质是贪心还是动态规划 贪心算法和动态规划算法共有特点是
\u8fea\u6770\u65af\u7279\u62c9\u7b97\u6cd5\u7684\u672c\u8d28\u662f\u8d2a\u5fc3\u8fd8\u662f\u52a8\u6001\u89c4\u5212\u8d2a\u5fc3\u662f\u4e00\u79cd\u7279\u6b8a\u7684\u52a8\u6001\u89c4\u5212\uff0c\u52a8\u6001\u89c4\u5212\u7684\u672c\u8d28\u662f\u72ec\u7acb\u7684\u5b50\u95ee\u9898\uff0c\u800c\u8d2a\u5fc3\u5219\u662f\u6bcf\u6b21\u53ef\u4ee5\u627e\u5230\u6700\u4f18\u7684\u72ec\u7acb\u5b50\u95ee\u9898\u3002
\u8d2a\u5fc3\u548c\u52a8\u5f52\u4e0d\u662f\u4e92\u65a5\u7684\uff0c\u800c\u662f\u5305\u542b\u7684\uff0c\u8d2a\u5fc3\u66f4\u5feb\uff0c\u4f46\u7ea6\u675f\u66f4\u5f3a\uff0c\u9002\u5e94\u8303\u56f4\u66f4\u5c0f\u3002
\u52a8\u5f52\u548cbfs\u7684\u5173\u7cfb\u4e5f\u662f\u4e00\u6837\u7684\u3002
\u5c55\u5f00\u4e00\u70b9\u8bb2\uff0c\u5728\u6c42\u89e3\u6700\u4f18\u5316\u95ee\u9898\u65f6\uff0c\u6709\u591a\u4e2a\u89e3\u3002\u800c\u6c42\u89e3\u7684\u8fc7\u7a0b\u7c7b\u4f3c\u4e00\u4e2a\u6811\uff0c\u6211\u4eec\u79f0\u4e4b\u4e3a\u6c42\u89e3\u6811\u3002
\u4e00\u822c\u7684\u6c42\u89e3\u6811\u771f\u7684\u662f\u4e00\u68f5\u6811\uff0c\u6240\u4ee5\u6211\u4eec\u53ea\u80fd\u7528bfs\u6765\u641c\u7d22\uff0c\u9876\u591a\u526a\u679d\u3002
\u6709\u4e9b\u7279\u6b8a\u7684\u6c42\u89e3\u6811\uff0c\u4e2d\u95f4\u5f88\u591a\u7ed3\u70b9\u662f\u91cd\u5408\u7684\uff0c\u7ed3\u70b9\u4e2a\u6570\u6bd4\u6240\u6709\u89e3\u7684\u4e2a\u6570\u5c11\u5f88\u591a\u4e2a\u6570\u91cf\u7ea7\u3002\u8fd9\u7c7b\u95ee\u9898\u8f83\u7279\u6b8a\uff0c\u6211\u4eec\u53ef\u4ee5\u4fdd\u5b58\u4e2d\u95f4\u7684\u641c\u7d22\u8fc7\u7a0b\u3002\u800c\u8bb0\u5fc6\u5316\u641c\u7d22\u548c\u52a8\u6001\u89c4\u5212\u672c\u8d28\u4e0a\u5c31\u662f\u4e00\u4e2a\u4e1c\u897f\uff0c\u5feb\u5c31\u5feb\u5728\u53ef\u4ee5\u4e0d\u7528\u91cd\u590d\u8ba1\u7b97\u5f88\u591a\u4e2d\u95f4\u7ed3\u679c\uff08\u6240\u8c13\u7684\u6700\u4f18\u5b50\u95ee\u9898\uff09\u3002
\u8fd8\u6709\u4e00\u4e9b\u7279\u6b8a\u7684\u6c42\u89e3\u6811\uff0c\u66f4\u7279\u6b8a\uff0c\u5b83\u4eec\u4e0d\u6b62\u6709\u5f88\u591a\u91cd\u590d\u7ed3\u70b9\uff0c\u800c\u4e14\u6bcf\u6b21\u9009\u62e9\u5206\u652f\u7684\u65f6\u5019\uff0c\u6211\u4eec\u53ef\u4ee5\u8bc1\u660e\u53ea\u8981\u9009\u62e9\u4e00\u4e2a\u5206\u652f\uff0c\u8fd9\u4e2a\u5206\u652f\u7684\u89e3\u5c31\u4e00\u5b9a\u6bd4\u5176\u4ed6\u9009\u62e9\u66f4\u4f18\u3002\u8fd9\u7c7b\u95ee\u9898\u5c31\u662f\u8d2a\u5fc3\u4e86\uff0c
\u6240\u4ee5bfs\uff0cdp\uff0c\u8d2a\u5fc3\u4e09\u4e2a\u65b9\u6cd5\u90fd\u662f\u89e3\u51b3\u6700\u4f18\u5316\u95ee\u9898\u7684\u65b9\u6cd5\uff0c\u6839\u636e\u95ee\u9898\u7684\u4e0d\u540c\uff0c\u7ea6\u675f\u8d8a\u5927\u7684\u95ee\u9898\u53ef\u4ee5\u7528\u8d8a\u5feb\u7684\u65b9\u6cd5\uff0c\u8d8a\u6162\u7684\u65b9\u6cd5\u53ef\u4ee5\u89e3\u51b3\u7684\u95ee\u9898\u8d8a\u666e\u9002\u3002
\u90fd\u662f\u6c42\u6700\u4f18\u89e3\uff0c
\u5176\u5b9e\u8fd9\u4e48\u95ee\u771f\u7684\u4e0d\u597d\uff0c\u56e0\u4e3a\u4ed6\u4eec\u5728\u672c\u8d28\u4e0a\u6709\u5f88\u5927\u5dee\u522b\uff0c
\u8d2a\u5fc3\u662f\u6bcf\u6b21\u6c42\u5c40\u90e8\u6700\u4f18\uff0c\u6700\u540e\u5f97\u5230\u5168\u5c40\u6700\u4f18\uff0c\u5f53\u7136\uff0c\u8981\u4fdd\u8bc1\u5c40\u90e8\u6700\u4f18\u80fd\u591f\u5f97\u5230\u5168\u5c40\u6700\u4f18
\u800c\u52a8\u89c4\u5219\u662f\u628a\u591a\u9636\u6bb5\u8fc7\u7a0b\u8f6c\u5316\u4e3a\u4e00\u7cfb\u5217\u5355\u9636\u6bb5\u95ee\u9898\uff0c\u5229\u7528\u5404\u9636\u6bb5\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u9010\u4e2a\u6c42\u89e3\uff0c\u5176\u5b9e\u6bcf\u4e00\u6b65\u90fd\u679a\u4e3e\u4e86\u6240\u6709\u7684\u60c5\u51b5\uff0c\u7c7b\u4f3c\u4e8e\u5206\u6cbb\uff0c\u4e5f\u53ef\u4ee5\u8bf4\u7c7b\u4f3c\u4e8e\u641c\u7d22\uff08\u53ea\u4e0d\u8fc7\u72b6\u6001\u51fa\u73b0\u540e\u5c31\u88ab\u8bb0\u5f55\u4e86\uff0c\u8fd9\u5c31\u662f\u8bb0\u5fc6\u5316\u641c\u7d22\uff0c\u6216\u8005\u7528\u586b\u8868\u7684\u65b9\u5f0f\uff09\u3002
Dijkstral的决策是选取当前Dist中最小的来更新。因为不会有其他点的Dist比它更小,也就不能来更新它。
(也就是当前这个点已经被所有可更新它的点更新完了)
这也是Dijkstral不能求最长路的原因。因为先选取了一条DIst最大的,不能保证之后就没有点的Dist更大。
绛旓細杩澃鏂壒鎷夛紙Dijkstra锛夌畻娉曪細缁欏畾甯︽潈鏈夊悜鍥綠鍜屾簮鐐箆锛屾眰v鍒癎涓叾浠栭《鐐圭殑鏈鐭矾寰勶紝鍙互浣跨敤杩澃鏂壒鎷夌畻娉锛涘熀浜庡凡缁忔眰鍑虹殑鏈鐭矾寰勭殑鍩虹涓婏紝姹傚緱鏇磋繙椤剁偣鐨勬渶鐭矾寰勶紝鏈缁堝緱鍒版暣涓渶鐭矾寰勶紝鏄椽蹇冪畻娉曠殑鎬濇兂锛涜开鏉版柉鐗规媺绠楁硶姹傚嚭鐨勮矾寰勪腑锛屼腑閫旀瘡涓《鐐瑰埌婧愮偣鐨勭殑璺緞涔熸槸姣忎釜椤剁偣鐨勬渶鐭矾寰勶紱鍜...
绛旓細濡傛灉鍥句腑鏈夊甫璐熸潈鐨勫洖璺,骞朵笖杩欎釜鍥炶矾鎬讳唬浠<0鐨勮瘽锛屽湪杩欎釜鍥炶矾涓婂寰幆涓娆℃墍姹傝矾寰勭殑浠d环渚夸細鍑忓皯锛岃繖鏍锋棤闄愬惊鐜笅鍘诲畬铔嬩簡锛堝綋鐒朵笉鑳芥椂姹夊瘑灏旈】鍥炶矾鍜屾鎷夊洖璺級銆傝繖绉嶆儏鍐靛氨娌℃湁鏈鐭矾銆傚疄闄呬笂灏辩畻鍙湁璐熸潈杈硅屾病鏈夊洖璺紝杩澃鏂壒鎷夌畻娉涔熷彲鑳藉け鏁堛傚涓嬪浘鎵绀 ...
绛旓細杩澃鏂壒鎷(dij astra) 绠楁硶 缁忓吀鐨勫崟婧愭渶鐭矾寰勭畻娉曚富瑕佹槸鍏堕噰鐢ㄧ殑鍔ㄦ佽鍒掓濇兂. 寮楁礇浼婂痉(floyd) 绠楁硶 缁忓吀鐨勬眰浠绘剰椤剁偣涔嬮棿鐨勬渶鐭矾寰,閲囩敤璐績鎬濇兂銆 鍗佷笁銆佷粙缁嶄竴涓嬫嫇鎵戞帓搴忎互鍙婃槸濡備綍瀹炵幇鐨? 鎷撴墤鎺掑簭鐨勬楠: (1)鍦ㄦ湁鍚戝浘涓换鎰忛夋嫨涓涓病鏈夊墠椹辩殑鑺傜偣杈撳嚭 (2)浠庡浘涓垹鍘昏鑺傜偣浠ュ強涓庡畠鐩歌繛鐨勮竟 (3)閲...
绛旓細(杩欓噷鎻忚堪鐨勬槸浠庤妭鐐1寮濮嬪埌鍚勭偣鐨dijkstra绠楁硶锛屽叾涓璚a->b琛ㄧずa->b鐨勮竟鐨勬潈鍊硷紝d(i)鍗充负鏈鐭矾寰勫)1锛 缃泦鍚圫={2,3,...n}, 鏁扮粍d(1)=0, d(i)=W1->i(1,i涔嬮棿瀛樺湪杈) or +鏃犵┓澶(1.i涔嬮棿涓嶅瓨鍦ㄨ竟) 2锛 鍦⊿涓紝浠(j)=min{d(i),i灞炰簬S}锛屼护S=S-{j}锛岃嫢S涓...
绛旓細Dijkstra(杩澃鏂壒鎷)绠楁硶鏄吀鍨嬬殑鏈鐭矾寰勮矾鐢辩畻娉曪紝鐢ㄤ簬璁$畻涓涓妭鐐瑰埌鍏朵粬鎵鏈夎妭鐐圭殑鏈鐭矾寰勩備富瑕佺壒鐐规槸浠ヨ捣濮嬬偣涓轰腑蹇冨悜澶栧眰灞傛墿灞曪紝鐩村埌鎵╁睍鍒扮粓鐐逛负姝侱ijkstra涓鑸殑琛ㄨ堪閫氬父鏈変袱绉嶆柟寮忥紝涓绉嶇敤姘镐箙鍜屼复鏃舵爣鍙锋柟寮忥紝涓绉嶆槸鐢∣PEN, CLOSE琛ㄦ柟寮 鐢∣PEN,CLOSE琛ㄧ殑鏂瑰紡锛屽叾閲囩敤鐨勬槸璐績娉曠殑绠楁硶绛栫暐锛...
绛旓細浠绘剰涓涓渶鐭矾绠楁硶閮芥槸鍩轰簬杩欐牱涓涓簨瀹烇細浠庝换鎰忚妭鐐笰鍒颁换鎰忚妭鐐笲鐨勬渶鐭矾寰勪笉澶栦箮2绉嶅彲鑳斤紝1鏄洿鎺ヤ粠A鍒癇锛2鏄粠A缁忚繃鑻ュ共涓妭鐐瑰埌B銆(1) 杩澃鏂壒鎷(Dijkstra)绠楁硶鎸夎矾寰勯暱搴(鐪嬩笅闈㈣〃鏍肩殑鏈鍚庝竴琛岋紝灏辨槸next鐐)閫掑娆″簭浜х敓鏈鐭矾寰勩傚厛鎶奦鍒嗘垚涓ょ粍锛歋锛氬凡姹傚嚭鏈鐭矾寰勭殑椤剁偣鐨勯泦鍚 V-S...
绛旓細寮楁礇浼婂痉 n^3 鐨勬椂闂存妸n涓偣涓や袱鐨勬渶鐭矾姹傚嚭鏉 杩澃鏂壒鎷 n^2鐨勬椂闂(鐢ㄥ爢浼樺寲鍒癗log(M),M鏄竟鏁)锛屽崟婧愭渶鐭矾锛屼絾鏄笉鑳藉浠樻湁璐熸潈鐨勫浘 SPFA锛孧*k鐨勬椂闂达紙K鏄竴涓父鏁帮級锛屽崟婧愭渶鐭矾锛岃兘瀵逛粯鏈夎礋鏉冪殑鍥 鎰熻甯哥敤鐨勫氨杩欎笁涓簡鍚с傘
绛旓細浣滀笟3-3:鐢ㄥ洖婧眰鍗曟簮鏈鐭矾寰勭殑Dijkstra绠楁硶,鐢ㄥ垎鏀檺鐣屾硶瀹炵幇銆傜鍥涚珷 璐績绠楁硶(浣滀笟)浣滀笟4-1:杩澃鏂壒鎷(Dijkstra)绠楁硶姹傚浘鐨勫崟婧愭渶鐭矾寰勩備綔涓4-2:鍒嗛挶甯鐨勮椽蹇冪畻娉 璐績鍘熷垯:姣忔閫夊彇鏈澶ч潰鍊艰揣甯併備綔涓4-3:0/1鑳屽寘闂鐨勮椽蹇冪畻娉曞疄鐜般 璐績绛栫暐:(1)鎬绘槸浠庝綑涓嬬墿鍝佷腑閫夋嫨鏈澶т环鍊肩殑鐗╁搧鏀惧叆鑳屽寘,...
绛旓細杩欎釜瑕佺湅闅滅鐗╃殑绋鐤忓害浜嗭紝鍗拌薄涓鏋滈殰纰嶇墿鏄瘮杈冨皯鐨勮瘽杩澃鏂壒鎷夋槸姣旇緝濂界殑绠楁硶锛屼笉杩璐績娉曚篃鏄彲浠ヨ冭檻鐨勩傝屼笖杩欓噷涔熸病鏈夋繁搴﹀拰骞垮害浼樺厛涓璇村惂锛屽洜涓烘病鍔炴硶瀹氫箟娣卞害鍜屽搴︺
绛旓細鍥剧伒濂栬幏寰楄呰壘鍏硅但灏斅杩澃鏂壒鎷(Edsger W. Dijkstra)璇翠粬鍦 1978 骞存浘缁忚В鍐充簡杩欎釜闂鐨勫彟涓涓増鏈備箣鍓嶄粬鏃犳暟娆″皾璇曞績绠楄В鍐冲畠鍗村薄灞″叆鐫,缁堜簬鍦ㄤ竴涓棤鐪犵殑澶滄櫄,鑺变簡鍏釜灏忔椂,纭槸娌℃湁鐢ㄧ焊鍜岀瑪,鍦ㄨ剳瀛愰噷瑙e喅浜嗛偅涓棶棰樸傚湪璇佹槑杩囩▼涓,浠栬繕灏忓皬鍦扮敤浜嗕竴涓嬪摜寰峰反璧寽鎯炽 澶辫釜鐨勬鏂瑰舰(Missing Square ...