漢羅塔問題java數學模型(從數學原型到數學模型)

2021-08-09 23:14:48 字數 2285 閱讀 5118

漢羅塔問題想必大家都知道了,然而今天我才第一次做,問題分類也很簡單,遞迴,遞迴是很常用的演算法,就是研究n項和n-1項的關係,下面算是自己以乙個沒有經驗的人第一次做的思路。(又是學習記錄做成教程系列)

那先從簡單的開始吧,首先我只用大腦只能推出前3組的移動過程,然後到4個盤子的時候基本就沒有思路了,並不敢肯定之間的聯絡,過程一下想不出來,那就想結果吧。前幾個都能推出來f(1)=1;f(2)=3;f(3)=7;然後就可以分析規律了。

開始分析乙個盤子時,a直接移過去c;

兩個盤子時,把a上面的小的放在b上,然後a下面的移到c,再然後b上面的移動到c; 然後是 三個盤子時,很明顯也要進行過渡,這裡過程不寫了,下面有。所以這個時候就可以看出來了,2個盤子時,就是把a上面的放在b上,把a下面的放在c上,這個時候就變成了乙個盤子的情況(只是ab的位置交換了);

然後是三個盤子的時候,也是先把a除了最下面的盤子放在b上(最小的兩個),然後把最大的乙個盤子放在c上,然後又變成了兩個盤子的情況了。

所以有n個盤子的推測也出來了,先把n-1個盤子整體放在b上,然後把a最下面的盤子放在c上,所以移動總次數=n-1移動的次數+移動成該情況的次數+1(把最大的盤放在c)

f(n-1)這個就是簡單的次數,那要移動成上面的步驟需要的次數理解也很簡單眼中只留下n-1個盤子,忽略最大的那乙個,把目的c換成目的b,那還是=f(n-1)

所以f(n)=2*f(n-1)+1,

那麼只用迭代就可以算出來了,也就是下面的第乙個方法,但如果要移動過程就適合使用遞迴了,但遞迴的理解最好還是基於這個公式來做,為了便於理解找出規律貼上了,前4個盤子的情況。

這裡檢驗一下上面的公式,這裡分別是2,3,4個盤子的移動步驟,有下面三個規律(上面提過的就沒寫了):

1.都是在f(n-1)的步驟將a的盤子(最大的那個)移動到c。

2.f(n)的前f(n-1)項和f(n-1)的對應項b和c是相反的,其他都是一模一樣的。

3.f(n)的後f(n-1)項和f(n-1)的對應項a和b是相反的,其他都是一模一樣的。

總結:前f(n-1)步的過渡盤是c,後f(n-1)步過渡盤是b。中間插了一步a到c。

那這樣我們就知道移動的規律了,然後程式設計就很簡單了(其實也沒那麼簡單)

package test1;

public class hanluota

system.out.println("實際移動次數"+result); }

//n為需要移動的盤子個數,a是起始位置,c是目的盤,b是過渡盤

public void process(int n,char a,char b,char c)

process(n-1, a, c, b); //過渡盤逐次交換,比如2,a,b,c是輸入時,到這裡是1,a,c,b,而n=2時第一步就是a-b,可以參考上面

count++;

system.out.println("第"+count+"步從" + a + " 移動盤子" + n + " 號到" + c);

process(n-1, b, a, c); //上面的n-1最後結束是1,return返回的n是上乙個數2

}

public static void main(string args)

}

這個結果就不貼了,上面 有,但其實這個遞迴**是屬於乙個常見的遞迴模型,不然是很難理解的,下面寫了個型別一樣的模型,這個模型的特點完全符合剛剛上面提到的三個規律,不然別的方法還真是想不到,試了次迭代,沒成功。。。

package test;

public class digui

name(n-1);

system.out.print(n-1+"\t");

name(n-1);

} public static void main(string args)

}

貼一下結果232

4232

523242

32當n=5時是232232

這個應該看出來了吧,遞迴不斷呼叫自身是無限迴圈的,這樣需要乙個停止判斷,就是if語句,但不是每個name(2)都可以結束整個迴圈的。

而是方法中的最後乙個name(2)才結束方法,當方法中兩個name(n-1)都完成時就會返回上乙個值,理解這個模型的重點是知道方法中的每個方法都要到n=2時才結束迴圈,具體過程不debug是很難理解的,懂了原理i就好理解上面的具體的**了,唯一要改的就是移動的對於順序,寫下來比較好懂一下(確定已經完全是做成了教學系列,不過自己也算學習了)

數學模型 稱重問題

兩類稱重問題 一 給定砝碼,可以稱多少種不同的質量。二 怎麼安排使得可以稱重的次數最少。一 砝碼個數 用天平稱量物體質量,方法是1.乙個秤盤放物體,另乙個秤盤放砝碼。這對應著二進位制思想。2.乙個秤盤放物體,兩個秤盤都可以放砝碼,二者的差對應著物品質量。這對應著三進製的思想。1.二進位制思想 將稱量...

從數學模型理解控制系統

自動控制原理 第六版 胡壽松 前言 正片 1.自動控制原理 這門課程主要研究物件是系統 且為電學系統。2.研究系統時,我們採用的方法一般都是對系統進行數學建模 根據組成系統的各部分元件包含的電學規律以及各元件是怎麼組成的 通過分析數學模型得到系統的效能。本課程中描述系統性質的數學模型一般採用微分方程...

經典組合數學模型 盒子與球問題

組合數學 盒子與球問題 給定 n 個不同的球,放進 m 個不同的盒子,盒子允許為空,有多少種方案?a 給定 n 個不同的球,放進 m 個不同的盒子,盒子不允許為空,有多少種方案?b 給定 n 個不同的球,放進 m 個相同的盒子,盒子允許為空,有多少種方案?c 給定 n 個不同的球,放進 m 個相同的...