傳送:
遞推公式:f[1]=0,f[n]=(f[n-1]+k)%n。f[i]是有i個人時,勝出的那個人的編號(編號從0~n-1)
我一開始一直沒理解這個遞推是怎麼來的,後來終於理解了
假設問題是從n個人編號分別為0...n-1,取第k個,
則第k個人編號為k-1的淘汰,剩下的編號為 0,1,2,3...k-2,k,k+1,k+2...
此時因為從剛剛淘汰那個人的下乙個開始數起,因此重新編號
把k號設定為0,則
k 0
k+1 1
...0 n-k
1 n-k+1
假設已經求得了n-1個人情況下的最終勝利者儲存在f[n-1]中,則毫無疑問,該勝利者還原到原來的真正編號即為 (f[n-1]+k)%n (因為第二輪重新編號的時候,相當於把每個人的編號都減了k,因此重新+k即可恢復到原來編號)。由此,我們可以想象,當最終只剩下乙個人的時候,該人即為勝利者,此時重新編號,因為只有乙個人,所以此時f[1]=0
這樣f[2]=(f[1]+k)%2,這樣就可以求出最終勝利者在2個人的時候的情況下的編號,由遞推公式f[n]=(f[n-1]+k)%n,可遞推到最初編號序列中該勝利者的編號。
因此用這個方法,只需一遍on的掃瞄,即可求出最終答案
不過該題要求編號從1開始,只要把f[n]+1即可。
約瑟夫環 遞推公式
遞推公式 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...
約瑟夫環問題(遞推公式)
約瑟夫環問題在 具體數學 一書上講得十分詳細 基本問題描述 已知n個人 以編號1,2,3 n分別表示 圍坐在一張圓桌周圍。從編號為1的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到圓桌周圍的人全部出列。也類似於 殺人狂問題 通常解決這類問題時...
約瑟夫環遞推公式推導
一共有 n 個人,編號為1,2,n,這些人圍成乙個圈子,然後指定乙個數 m 從 1 號開始,數到 m 的人出列,並且下乙個人重新開始由 1 計數,問最後乙個出列的人是幾號?1.通常這類問題會想到使用鍊錶解決,每 m 個就刪除乙個節點 2.也可以用迴圈陣列的方式,對陣列的下標取模 對於以上兩種方法都不...