分治算法——汉诺塔问题

一、分治算法概念
     
“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题,直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。

        这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换) 。

        任何一个可以用计算机求解的问题所需的计算时间都与其规模有关。问题的规模越小,越容易直接求解,解题所需的计算时间也越少。例如,对于n个元素的排序问题,当n=1时,不需任何计算。n=2时,只要作一次比较即可排好序。n=3时只要作3次比较即可,…。而当n较大时,问题就不那么容易处理了。要想直接解决一个规模较大的问题,有时是相当困难的。

二、分治法的设计思想

        将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。

三、分治策略

        对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解。这种算法设计策略叫做分治法。

四、分治法实现步骤

①分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题;②解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题;③合并:将各个子问题的解合并为原问题的解。

它的一般的算法设计模式如下:                                                                                             Divide-and-Conquer(P)                                                                                                            1. if |P|≤n0                                                                                                                                 2. then return(ADHOC(P))                                                                                                       3. 将P分解为较小的子问题 P1 ,P2 ,…,Pk                                                                                     4. for i←1 to k                                                                                                                          5. do yi ← Divide-and-Conquer(Pi)  递归解决Pi                                                                      6. T ← MERGE(y1,y2,…,yk)  合并子问题                                                                                7. return(T)

五、可使用分治法求解的一些经典问题                                                                               (1)二分搜索 

 (2)大整数乘法

(3)Strassen矩阵乘法

(4)棋盘覆盖 

 (5)合并排序

(6)快速排序

(7)线性时间选择

 (8)最接近点对问题

 (9)循环赛日程表

(10)汉诺塔



  • 鍒嗘不绠楁硶鈥斺旀眽璇哄闂
    绛旓細涓銆鍒嗘不绠楁硶姒傚康       鈥滃垎鑰屾不涔嬧濓紝灏辨槸鎶婁竴涓鏉傜殑闂鍒嗘垚涓や釜鎴栨洿澶氱殑鐩稿悓鎴栫浉浼肩殑瀛愰棶棰橈紝鍐嶆妸瀛愰棶棰樺垎鎴愭洿灏忕殑瀛愰棶棰橈紝鐩村埌鏈鍚庡瓙闂鍙互绠鍗曠殑鐩存帴姹傝В锛屽師闂鐨勮В鍗冲瓙闂鐨勮В鐨勫悎骞躲        杩欎釜鎶宸ф槸寰堝楂樻晥绠楁硶鐨勫熀纭锛屽鎺...
  • 鍒嗘不绠楁硶鐨勬楠ゅ寘鎷
    绛旓細鍒嗘不绠楁硶鏄皢涓涓鏉傜殑闂鍒嗘垚涓や釜鎴栨洿澶氱殑鐩稿悓鎴栫浉浼肩殑瀛愰棶棰橈紝鍐嶆妸瀛愰棶棰樺垎鎴愭洿灏忕殑瀛愰棶棰橈紝鏈鍚庡皢瀛愰棶棰樼殑瑙e悎骞讹紝寰楀埌鍘熼棶棰樼殑瑙c傚垎娌荤畻娉曞簲鐢ㄥ満鏅細1銆姹夎濉旈棶棰銆2銆佸鎵炬暟鍒椾腑鏈澶у煎拰鏈灏忓肩殑闂銆3銆佸拰鍏跺畠绠楁硶鎼厤浣跨敤锛屾瘮濡備簩鍒嗘煡鎵剧畻娉曘佸綊骞舵帓搴忕畻娉曘佸揩閫熸帓搴忕畻娉曠瓑銆傛眽璇哄闂鏄粈涔...
  • 鍒嗘不绠楁硶鍑犱釜缁忓吀渚嬪瓙
    绛旓細鍒嗘不娉曪紝瀛楅潰鎰忔濇槸鈥滃垎鑰屾不涔嬧濓紝灏辨槸鎶婁竴涓鏉傜殑1闂鍒嗘垚涓や釜鎴栧涓浉鍚屾垨鐩镐技鐨勫瓙闂锛屽啀鎶婂瓙闂鍒嗘垚鏇村皬鐨勫瓙闂鐩村埌鏈鍚庡瓙闂鍙互绠鍗曞湴鐩存帴姹傝В锛屽師闂鐨勮В鍗冲瓙闂鐨勮В鐨勫悎骞讹紝杩欎釜鎬濇兂鏄緢澶氶珮鏁绠楁硶鐨勫熀纭銆傚浘涓 渚嬪鎺掑簭绠楁硶(蹇熸帓搴忥紝褰掑苟鎺掑簭)锛屽倕閲屽彾鍙樻崲(蹇熷倕閲屽彾鍙樻崲)绛夈傚垎...
  • 濡備綍瑙姹夎濉旈棶棰
    绛旓細1.鍒╃敤浜屽弶閫掑綊鏍 鏂囩尞[4]鎸囧嚭锛姹夎濉旈棶棰鐨勯掑綊绠楁硶浠g爜涓庝簩鍙夋爲鐨勪腑搴忛亶鍘嗙畻娉曚唬鐮佸崄鍒嗙浉浼硷紝鏁呴噰鐢ㄤ簡浜屽弶鏍戠殑涓簭閬嶅巻锛屽彂鐜版眽璇哄闂鐨勭畻娉曟楠ゆ濂藉彲浠ョ敾鎴愪竴妫靛畬鍏ㄤ簩鍙夋爲锛屽叾涓簭閬嶅巻杩囩▼灏辨槸姹夎濉旈棶棰樼殑绠楁硶姝ラ銆傚嚱鏁癿ove(N-1,s,e,t) N:鐩樺瓙鏁 锛宻:璧峰妗 e:鐩爣妗 t:杩囨浮妗...
  • 姹夎濉旈棶棰
    绛旓細鏁板垪鎴戞兂浣犳槸娓呮鐨勶紝鎵璋撶殑閫掑綊锛屽氨鏄妸an鍙樻垚a(n-1)鍘诲鐞闂锛屽鐞嗕竴涓氶」寮忔槸鐩稿悓鐨勬柟娉曪紝鍙缁欏嚭a1(鎴栬呰繕鏈塧2)锛岃繖鏄掑綊缁撴潫鐨勬潯浠躲傚亣璁姹夎濉A B C涓夋牴閽堬紝鍙冭檻绉诲姩鏈搴曚笅鐨勭洏瀛愭椂锛屽鏋滃彧鏈変竴涓洏瀛愶紝灏辨槸鐩存帴A->C 濡傛灉鍙湁涓や釜鐩樺瓙锛屽氨鏄疉->B 鐒跺悗A->C 濡傛灉鍙湁涓変釜鐩樺瓙...
  • 鍑犵甯哥敤鐨绠楁硶绠浠
    绛旓細鎴戜滑鐔熺煡鐨勫姹夎濉旈棶棰銆佹姌鍗婃煡鎵绠楁硶銆佸揩閫熸帓搴忕畻娉曠瓑閮芥槸鍒嗘不娉曡繍鐢ㄧ殑鍏稿瀷妗堜緥銆備互棰1045--Square Coins涓轰緥锛屽厛瀵归鎰忚繘琛屽垎鏋愶紝鍙涓涓嚱鏁癴(m,n)绛変簬鐢ㄩ潰鍊间笉瓒呰繃n2鐨勮揣甯佹瀯鎴愭诲间负m鐨勬柟妗堟暟锛屽垯瀹规槗鎺ㄥ鍑猴細f(m,n)= f(m-0*n*n,n-1)+f(m-1*n*n,n-1)+f(m-2*n*n,n-1)...
  • 鏁版嵁缁撴瀯涓绠楁硶澶у娌″鏄庣櫧鐨勬潵
    绛旓細鏈鐭矾寰凞iikstra绠楁硶銆丗loyd绠楁硶銆乻pfa绠楁硶 鏈灏忕敓鎴愭爲prim绠楁硶銆乲ruskal绠楁硶 鍏朵粬鏁版嵁缁撴瀯绾挎鏍戙佸悗缂鏁扮粍绛夌瓑 缁忓吀绠楁硶瀛︿範姝ラ 閫掑綊绠楁硶(姹傞樁涔樸佹枑娉㈤偅濂戙姹夎濉旈棶棰)浜屽垎鏌ユ壘 鍒嗘不绠楁硶(蹇帓銆佸綊骞舵帓搴忋佹眰鏈杩戠偣瀵圭瓑闂)璐績绠楁硶(浣跨敤杈冨锛屽尯闂撮夌偣闂锛屽尯闂磋鐩栭棶棰)甯歌鍔ㄦ佽鍒(LCS(鏈闀垮叕鍏卞瓙...
  • 鑰冣滆蒋鑰冣濈殑杞欢璁捐甯,璇ョ湅浠涔堜功?
    绛旓細绠楁硶鐨勫涔犱笉鏄竴鏈濅竴澶曞氨鑳芥彁楂樼殑锛屼竴瀹氳闈欎笅蹇冩潵瀛︿範涓浜涚粡鍏哥畻娉曪紝姣斿锛氱┓涓炬硶銆佽椽濠硶銆鍒嗘不娉曘佽凯浠f硶銆侀掓帹娉曘侀掑綊娉曘佸洖婧硶;鎵句竴浜涙湁鍚嶇殑绠楁硶绋嬪簭鏉ュ垎鏋愶紝姣斿锛氳儗鍖呴棶棰樸佺粍鍚堥棶棰樸佹枑娉㈤偅濂戞暟鍒椼侀┈韪忔鐩橀棶棰樸佽揣鏈楁媴闂銆佸叓鐨囧悗闂銆佽糠瀹棶棰樸姹夎濉旈棶棰銆佺害鐞村か鐜棶棰樼瓑銆傛湁浜嗚繖浜涚畻娉...
  • 鑰冭檻涓嬭堪鑳屽寘闂鐨勫疄渚嬨傛湁5浠剁墿鍝,鑳屽寘瀹归噺涓100銆
    绛旓細鍏稿瀷鐨勭畻娉:Prim绠楁硶鍜孠ruskal绠楁硶 鍒嗘不绠楁硶鐨勫熀鏈濇兂鏄皢涓涓妯′负N鐨闂鍒嗚В涓篕涓妯¤緝灏忕殑瀛愰棶棰,杩欎簺瀛愰棶棰樼浉浜掔嫭绔嬩笖涓庡師闂鎬ц川鐩稿悓.姹傚嚭瀛愰棶棰樼殑瑙,灏卞彲寰楀埌鍘熼棶棰樼殑瑙.鍏稿瀷鐨勭畻娉:姹夎濉,浜屽垎鎼滅储 鍔ㄦ佽鍒,閫氳繃鎶婂師闂鍒嗚В涓虹浉瀵圭畝鍗曠殑瀛愰棶棰樼殑鏂瑰紡姹傝В澶嶆潅闂鐨勬柟娉 鍏稿瀷鐨勭畻娉:鑳屽寘...
  • 绠鍗曡璇翠綘鍦ㄧ敓娲讳腑瑙佽繃鐨勫簲鐢ㄨ绠楁満鐨勪緥瀛?
    绛旓細2銆佽绠楁満鍦ㄥ搴腑鐨勫簲鐢 闅忕潃涓汉璁$畻鏈虹殑鏅強锛屽彲浠ラ氳繃璁$畻鏈哄惉闊充箰锛屼娇鎴戜滑鑳藉闄堕唹鍦ㄩ煶涔愪箣涓紱鍙互鐪嬬數褰憋紝鎶婄數褰遍櫌鎼埌浜嗚嚜宸卞涓紱鍙互鐪嬫柊闂伙紝鐪嬭偂绁紝鐪嬩竴浜涜嚜宸卞叧蹇冪殑涓滆タ锛涘姝ょ绉嶏紝鏃犱笉缁欑敓娲诲甫鏉ヤ簡渚垮埄銆3銆佽绠楁満鍦ㄥ伐涓氾紝鍐滀笟鍜屽晢涓氫笂鐨勫簲鐢 濡傛満姊板伐绋嬪笀鍦ㄨ绠楁満涓婄粯鍒剁殑浜у搧璁捐鍥撅紝鍦...
  • 扩展阅读:汉诺塔4层最快解法 ... 8层汉诺塔15步解法 ... 7层汉诺塔最快步骤 ... 编程求解汉诺塔问题 ... 汉诺塔图解一步一图 ... 汉诺塔递归树怎么画 ... 汉诺塔问题解决思路 ... 五个汉诺塔步骤图 ... 汉诺塔8层十句口诀 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网