描述: 有人围成一圈等待被处决。计数从圆圈中的某个点开始,并沿固定方向围绕圆圈进行。在每个步骤中,都会跳过一定数量的人并执行下一个人。消除围绕圆圈进行(随着被处决的人被移除,圆圈变得越来越小),直到只剩下最后一个人,他被赋予了自由。
我用谷歌搜索了这个“约瑟夫斯问题”,维基百科的热门文章给了我一个动态编程解决方案:f(n,k)=((f(n-1,k)+k-1) mod n)+1, with f(1,k)=1
,但这只会产生最后的幸存者。我怎样才能得到执行的人的顺序?比如说,p(5, 3) = {3,1,5,2,4}。
另外,有O(nlogn)
解决方案而不是解决方案O(nk)
吗?