演算法雜記 001 約瑟夫環

2021-09-28 14:52:01 字數 596 閱讀 3866

問題描述:

1)n個人,編號為0~n-1;2)從0開始報數,報至m-1的退出;3)剩下的人繼續從0開始報數;4)求最後的勝利者。

解法:第一次報數:退出者編號為(m-1)%n

記k=m%n,通過對剩下的人重新編碼轉換為原先相同的子問題。若已知子問題的解為x則原問題的解為(x+m)%n,對映推導x ->(x+k)%n <=> (x+m%n)%n <=> (x+m)%n

k   -> 0

k+1 -> 1

k+2 -> 2

...k-2 -> n-2

即遞推公式為:

f(m,1) = 0

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

**:

def josephus(m, n):

if n < 1 or m < 0:

return -1

result = 0

for i in range(2, n+1):

result = (result+m)%i

return result

reference:

約瑟夫環演算法

約瑟夫環是乙個數學的應用問題 已知n個人 以編號1,2,3.n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到圓桌周圍的人全部出列。2b求解 private void myjosf int teamle...

演算法 約瑟夫環

已知n個人 以編號1,2,3 n分別表示 圍坐在一張圓桌周圍 使用 list 來模擬環結構,不被淘汰則將其加入到 list 尾部,淘汰的直接移除。需注意,以編號 k 為第乙個報數的人,需要調整其在報數正式開啟前到 list 的頭部。param n 人的總數 param k 開始報數的序號,1 k n...

作為雜記001

今天是11月4號,虎年的尾巴只剩56天了,我清楚的認識到時間的緊迫性。必須再抓緊點才能完成年底前結束 寫作的預期目標,最不濟也要完成中期報告。ic設計的理論學習還是不能放鬆的,如果說 的權重佔第一位的話,那這個事情的重要性緊接其後。下午抽空找了幾個ic設計方面的論壇,都挺不錯的,留個備份 http ...