約瑟夫環公式法解釋

2021-10-01 19:17:26 字數 1227 閱讀 7091

公式法:

f(n,m) = (f(n-1,m) + m) % n

f(1,m) = 0 (索引從0開始)

f是每一輪中存活的人對應的編號。

遞推過程如下:設編號為2的出局(即m=3)

已知f(1,m) = 0,即只有乙個人的隊伍中,存活的肯定是編號0

從最後一輪f(1,m)求解倒數第二輪f(2,m):

倒數第二輪有兩個人,殺掉乙個人後剩餘一人;

那對應的報號順序為: 0 1 20,(最後乙個0對應的存活的人,也就是最後一輪的編號)

實際報號順序對應的編號是:0 1/ 01(上下對應,最後剩的人對應編號為1.)

故倒數第二輪(0,1),剩餘的是編號為1

倒數第三輪同理

報號順序: 0 1 2 01(最後的0,1表示這輪之後存活的人,也就是倒數第二輪中人的編號)

實際編號: 0 1 2/ 01(這一輪實際有三個人,對應實際編號,最後剩餘的人也是編號1)

故倒數第三輪(0,1,2),剩餘的是編號為1

倒數第四輪

報號順序: 0 1 2 012(最後的0,1,2表示這輪之後存活的人,也就是倒數第三輪輪中人的編號)

實際編號: 0 1 2 3/01(這一輪實際有4個人,對應實際編號,最後剩餘的人也是編號1)

故倒數第三輪(0,1,2,3),剩餘的是編號為0

倒數第五輪

報號順序:0 1 201 2

實際順序:0 1 234/ 0

故下一輪中這一輪中對應的是編號3

歸納可以得到結論,如果我們知道n-1個人中,最終剩餘的人的編號,那麼,就可以得到n個人最終剩餘的編號

因為從n個人到n-1個人,一定經過了1次,0到m-1的報號,如圖所示

紅色的n-1個編號就是就是下一輪n-1個人的實際編號順序,也可以與n中的編號相對應了

所以n-1中倖存者編號對應n中倖存者編號就是:

f(n,m) = (f(n-1,m)+m)%n

例如,如果f(n-1,m)=1,那麼它在f(n,m)中的編號為m+1.

約瑟夫環(鍊錶法,公式法)

約瑟夫環作為乙個數學問題,它的 實現方式有很多,比如迴圈鍊錶,公式解決或者動態規劃,之前參考資料也有用遞迴解決的。anyway,這些都是解決約瑟夫環問題很有效的方法。這裡總結兩種方法,迴圈鍊錶法和公式法。首先是迴圈鍊錶法,它的原理很簡單,也很容易理解。求解過程和人思考解決的過程很接近。設總人數為n,...

約瑟夫環 遞推公式

遞推公式 f n,m f n 1,m m n f n,m f n 1,m m nf n 1,m 1 2 3 4 5 6 7 8 9 1001 2345 6789 1234 5678 91045 6789 10127 89101 24510 1245 7845 78101 81014 5458 101...

leetcode之約瑟夫環問題,妙哉公式法

約瑟夫環問題是n個人圍成一圈,從第乙個人開始報數,報到m的人出圈,剩下的人繼續從1開始報數,報到m的人出圈 如此往復,直到最後只剩下1個人。而今天的leetcode面試題62.圓圈中最後剩下的數字正是約瑟夫環問題,題目如下。思路一 迴圈鍊錶法 在我們學習基礎的資料結構時,迴圈鍊錶可謂是專為約瑟夫環問...