分而治之思想
??????? 當(dāng)一個(gè)問(wèn)題的規(guī)模很大時(shí),直接求解往往比較困難。對(duì)于這類問(wèn)題,很大一部分是可以采取分而治之的思想來(lái)處理的。
??????? 分治法是把問(wèn)題劃分成多個(gè)子問(wèn)題來(lái)進(jìn)行處理。這些子問(wèn)題,在結(jié)構(gòu)上跟原來(lái)的問(wèn)題一樣,但是規(guī)模比原來(lái)的問(wèn)題要小。如果得到的子問(wèn)題還是比較大,那么可以接著細(xì)分,一直細(xì)分到可以接受的程度為止。這樣就可以用迭代的方法,分別求解這些子問(wèn)題,最后再將子問(wèn)題的解組合起來(lái),就可以得到原問(wèn)題的解。
分治法的設(shè)計(jì)原理
??????? 對(duì)于一個(gè)規(guī)模為n的問(wèn)題P(n),可以將它分解成k個(gè)規(guī)模較小的子問(wèn)題,這些子問(wèn)題互相獨(dú)立,且結(jié)構(gòu)跟原問(wèn)題的結(jié)構(gòu)相同。在解這些問(wèn)題的時(shí)候,又可以對(duì)每一個(gè)子問(wèn)題進(jìn)行進(jìn)一步的分解,直到某一個(gè)閾值n0時(shí)為止。遞歸地解這些子問(wèn)題,再把各個(gè)子問(wèn)題的解結(jié)合起來(lái),就得到原問(wèn)題的解。這就是分而治之的思想。
??????? 分治法的設(shè)計(jì)步驟:
???????
??????? 其中n0是一個(gè)閾值,當(dāng)問(wèn)題規(guī)模小于等于n0時(shí),就不需要再對(duì)問(wèn)題進(jìn)行分解,而直接調(diào)用adhoc求解。adhoc是用來(lái)直接求解規(guī)模最小問(wèn)題p的子算法。merge用來(lái)把所有子問(wèn)題的解合并成原問(wèn)題的真正解。
??????? 從上面的圖中可以看出,分支思想的實(shí)現(xiàn)有三個(gè)步驟:
??????? (1)劃分步:把輸入的問(wèn)題劃分成k個(gè)子問(wèn)題。一般使這k個(gè)問(wèn)題的規(guī)模大致相同。
??????? (2)治理步:當(dāng)問(wèn)題的規(guī)模大于預(yù)定義的n0時(shí),治理步由k個(gè)遞歸調(diào)用組成。
??????? (3)組合步:組合步主要用來(lái)將各子問(wèn)題的解合并成原問(wèn)題的解。這一步對(duì)分治法的實(shí)際性能很重要。
轉(zhuǎn)載于:https://www.cnblogs.com/superhuake/archive/2012/07/17/2595751.html
總結(jié)
- 上一篇: 所谓经济现象
- 下一篇: 学习 AngularJs 终于有点进步了