链表之单链表约瑟夫问题(二)
約瑟夫環(huán)(約瑟夫問題)是一個(gè)數(shù)學(xué)的應(yīng)用問題:已知n個(gè)人(以編號(hào)1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號(hào)為k的人開始報(bào)數(shù),數(shù)到m的那個(gè)人出列;他的下一個(gè)人又從1開始報(bào)數(shù),數(shù)到m的那個(gè)人又出列;依此規(guī)律重復(fù)下去,直到圓桌周圍的人全部出列。通常解決這類問題時(shí)我們把編號(hào)從0~n-1,最后[1] 結(jié)果+1即為原問題的解。
約瑟夫環(huán):遞歸算法
假設(shè)下標(biāo)從0開始,0,1,2 .. m-1共m個(gè)人,從1開始報(bào)數(shù),報(bào)到k則此人從環(huán)出退出,問最后剩下的一個(gè)人的編號(hào)是多少?
現(xiàn)在假設(shè)m=10
0 1 2 3 4 5 6 7 8 9 k=3
第一個(gè)人出列后的序列為:
0 1 3 4 5 6 7 8 9
即:
3 4 5 6 7 8 9 0 1(*)
我們把該式轉(zhuǎn)化為:
0 1 2 3 4 5 6 7 8 (**)
則你會(huì)發(fā)現(xiàn): ((**)+3)%10則轉(zhuǎn)化為(*)式了
也就是說(shuō),我們求出9個(gè)人中第9次出環(huán)的編號(hào),最后進(jìn)行上面的轉(zhuǎn)換就能得到10個(gè)人第10次出環(huán)的編號(hào)了
設(shè)f(m,k,i)為m個(gè)人的環(huán),報(bào)數(shù)為k,第i個(gè)人出環(huán)的編號(hào),則f(10,3,10)是我們要的結(jié)果
當(dāng)i=1時(shí), f(m,k,i) = (m+k-1)%m
當(dāng)i!=1時(shí), f(m,k,i)=
總結(jié)
以上是生活随笔為你收集整理的链表之单链表约瑟夫问题(二)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 链表之单链表约瑟夫问题(一)
- 下一篇: 链表之单链表约瑟夫问题(三)