對於約瑟夫環的數學解法的理解
阿新 • • 發佈:2019-01-26
寒假的時候看到了約瑟夫環的數學解法,感覺很厲害,不過一直沒有機會再進一步的看一看它的證明,今天下午有時間了,我就闡述一下我的理解
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
約瑟夫環問題模擬是可以做的,但是執行時間太恐怖了,它的遞推數學解法簡單得喪心病狂,其實想來這種規律性極強的問題應該都是有遞推解法的
設 一共有n人,編號1~n,每報到第m人時出列(事實上等同於編號0~n,報到第m-1個人出列),此時第k個人出列
最開始:1 2 3 4 .....n;
出列後:1 2 3 4 .... k-1 k+1 k+2...n;
將m+1號以後的資料調到1之前,然後將m+1號設定為1;
調整後 |
k+1 |
k+2 |
k+3 |
k+4 |
...... |
n |
1 |
2 |
3 |
...... |
k-1 |
設定後 |
1 |
2 |
3 |
4 |
..... |
n-k |
n-k+1 |
n-k+2 |
n-k+3 |
...... |
n-1 |
-
設定判斷條件:
因為當求得的值是0時意味著 X 被 n 整除,即 X = n;if( F[n] == 0){ F[n] = n; }
-
將序列第一個元素序號改為0,即
此時數列中的序號是 0 ~ n-1,而遞推式所求值的範圍也是 0 ~ n-1,正好可以相互對應F[1] = 0;