02-分治

分治

分治法的基本思想:分治法將一個(gè)難以直接解決的大問題分解成一些規(guī)模較小的子問題,分別解決各個(gè)子問題,再合并子問題的解得到原問題的解。

漢諾塔問題

相傳在古印度圣廟中,有一種被稱為漢諾塔(Hanoi)的游戲。該游戲是在一塊銅板裝置上,有三根桿(編號(hào)A、B、C),在A桿自下而上、由大到小按順序放置64個(gè)金盤。游戲的目標(biāo):把A桿上的金盤全部移到C桿上,并仍保持原有順序疊好。操作規(guī)則:每次只能移動(dòng)一個(gè)盤子,并且在移動(dòng)過程中三根桿上都始終保持大盤在下,小盤在上,操作過程中盤子可以置于A、B、C任一桿上。

public class DivideAndConquer {
    // 漢諾塔問題,遞歸
    public static void hanoi(int n, String a, String b, String c) {
        if (n == 1) {
            // 只有一個(gè)盤,則直接從a移動(dòng)到c
            System.out.println("第1個(gè)盤子移動(dòng):" + a + "-->" + c);
        } else {
            // 1. 以C盤為中介,從A桿將1至n-1號(hào)盤移至B桿
            hanoi(n - 1, a, c, b);
            // 2. 將A桿中剩下的第n號(hào)盤移至C桿
            System.out.println("第" + n + "個(gè)盤子移動(dòng):" + a + "-->" + c);
            // 3. 以A桿為中介,從B桿將1至n-1號(hào)盤移至C桿
            hanoi(n - 1, b, a, c);
        }
    }

    public static void main(String[] args) {
        hanoi(3, "A", "B", "C");
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 分治法在每一層遞歸上都有三個(gè)步驟 分解:將原問題分解為若干個(gè)規(guī)模較小,相互獨(dú)立,與原問題形式相同的子問題 解決:若...
    粑粑八成閱讀 155評(píng)論 0 0
  • 分治問題,個(gè)人感覺叫分解問題更容易記憶核心,即把難以解決的大問題分成若干個(gè)小問題。在這里,將大問題分解為小問題是本...
    ZMRWEGo閱讀 597評(píng)論 0 0
  • 前言 相信學(xué)過《數(shù)據(jù)結(jié)構(gòu)與算法》這門課程的同學(xué)都有聽過漢諾塔問題,但是可能在大學(xué)的時(shí)候沒有鉆研過,或者在學(xué)的時(shí)候就...
    鄭土強(qiáng)ztq閱讀 3,204評(píng)論 2 3
  • 一、遞歸算法介紹 這篇文章講的是一個(gè)古老而又經(jīng)典的漢諾塔問題,他是遞歸算法的一個(gè)很好的應(yīng)用實(shí)例。有關(guān)遞歸函數(shù)的介紹...
    IT之旅閱讀 1,597評(píng)論 0 1
  • To iterate is human, to recurse, divine.人理解迭代,神理解遞歸。 什么是遞...
    周闖閱讀 703評(píng)論 0 0

友情鏈接更多精彩內(nèi)容