關於約瑟夫環問題的理解

2021-08-22 10:39:12 字數 740 閱讀 5480

有序列:0,1,2,3......,n-1(可以將0~n-1的序列值理解為任意陣列下標),每次刪除第m個,注意該序列首尾相連,即n-1的下乙個為0,問最後剩下的數字是多少?

此問題被稱為約瑟夫環問題,可以用列舉找規律解決,但也可以使用動態規劃來思考:

1、記1~n-1序列最後剩下的數字為 f(n,m) ,其中n表示有n個數字,m表示每次刪除第m個,因為這兩個變數就能決定最後剩下的數字,所以以它們為引數。

2、第一次刪除的數字為 k,k=(m-1)%n。剩下的數字串行為:k+1,k+2......,n-1,0,1......,k-1, 由於這裡的序列表示變了(當然還可以用0~n-2來表示這個序列,但是新的0和之前的0不在對應同乙個數字),所以對應的函式也改變:f'(n-1,m)。但是我們可以有關係式:f'(n-1,m)=f(n,m)。

3、現在我們將 f() 關係用於新的序列,此處需要對映:將k+1,k+2......,n-1,0,1......,k-1對映為0,1,2,3......,n-2,關係式為p(x)=(x-k-1)%n,x代表對映前的數字,p(x)代表對映後的數字;逆對映關係式為:q(x)=(x+k+1)%n。根據這個關係,我們可以有:f'(n-1,m)=(f(n-1,m)+k+1)%n;

與f'(n-1,m)=f(n,m)聯立後可以得到:f(n,m) = (f(n-1,m)+k+1)%n = (f(n-1,m)+(m-1)%n+1)%n = (f(n-1,m)+(m-1)+1)%n = (f(n-1,m)+m)%n。

遞推關係式得到,就可以求解了。

約瑟夫環問題的理解

據說著名猶太歷史學家josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也不要被敵人抓到,於是決定了乙個自殺方式,41個人排成乙個圓圈,由第1個人開始報數,每報數到第3人該人就必須自殺,然後再由下乙個重新報數,直到所有...

約瑟夫問題 約瑟夫環

約瑟夫 問題 有時也稱為約瑟夫斯置換,是乙個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。又稱 丟手絹問題 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死...

約瑟夫問題 約瑟夫環

約瑟夫問題 有時也稱為約瑟夫斯置換,是乙個出現在電腦科學和數學中的問題。在計算機程式設計的演算法中,類似問題又稱為約瑟夫環。又稱 丟手絹問題 據說著名猶太歷史學家 josephus有過以下的故事 在羅馬人占領喬塔帕特後,39 個猶太人與josephus及他的朋友躲到乙個洞中,39個猶太人決定寧願死也...