首页 > 其他分享 >约瑟夫问题及深入

约瑟夫问题及深入

时间:2023-10-09 21:23:58浏览次数:36  
标签:... 4x 约瑟夫 问题 beta 1b 深入 2n 递推

问题大意:

从围成标有记号 \(1\) 到 \(n\) 个人开始,每隔一个删去一个人,直到最后只有一个人幸存下来。例如 \(n=10\) 的起始图形:

删除的顺序是:\(2,4,6,8,10,3,7,1,9\) ,最后 \(5\) 幸存下来。

解决:

我们设对于有 \(n\) 个人的环,最终幸存者编号为 \(F_n\)。

所以 \(F_{10}=5\)。接着我们模拟几个小的情况,可以打出如下的表。

\(n\) \(1\) \(2\) \(3\) \(4\) \(5\) \(6\)
\(F_{n}\) \(1\) \(1\) \(3\) \(1\) \(3\) \(5\)

这看起来感觉 \(F_n\) 总是奇数,仔细一想会发现绕完一圈后所有的偶数都被删除了,这样似乎人数就会减半。

所以我们分奇偶性来考虑这个问题。

对于偶数的情形,假设一开始有 \(2n\) 个人,经过第一轮后剩下的是:

\(3\) 号就是下一个被删除的人,仔细一点会发现,除了每个人的编号加倍并减一之外,此时的情形正对应着 \(n\) 个人开始时的情形,就是说:

\(F_{2n}=2F_{n}-1\),\(n≥1\)。

对于奇数的情形,假设一开始有 \(2n+1\) 个人,经过第一轮后剩下的是:

我们再次得到与 \(n\) 个人开始时相似的情形,但这一次他们的编号加倍并加一,就是说:

\(F_{2n+1}=2F_{n}+1\),\(n≥1\)。

我们把这些结合起来:

得到关于 \(F\) 的递推式:

\(F_1=1\);

\(F_{2n}=2F_{n}-1\),\(n≥1\);----------\((1.1)\)

\(F_{2n+1}=2F_{n}+1\),\(n≥1\)。

有了递推式,我们来寻找它的封闭形式,因为封闭形式算得会更快,同时也会蕴含更丰富的信息。

我们通过得到的递推式来打一张表:

\(n\) \(1\) \(2\) \(3\) \(4\) \(5\) \(6\) \(7\) \(8\) \(9\) \(10\) \(11\) \(12\) \(13\) \(14\) \(15\) \(16\)
\(F_n\) \(1\) \(1\) \(3\) \(1\) \(3\) \(5\) \(7\) \(1\) \(3\) \(5\) \(7\) \(9\) \(11\) \(13\) \(17\) \(1\)

我们似乎找到了它的规律,可以按照 \(2\) 的幂将表中的数据分组。每一组的开始\(F_n\)总等于 \(1\),并且组里的数据每次递增 \(2\)。因此,如果我们把 \(n\) 写成 \(2^m+1\) 的形式,其中 \(2^m\) 是不超过 \(n\) 的 \(2\) 的最大幂,\(l\)则是剩下的数,那么递推式的解看起来是:

\(F_{2^m+ l}=2l+1\),\(m≥0\),\(0≤l≤2^m\)。----------\((1.2)\)

注意,如果 \(2^m≤n<2^{m+1}\),则余下来的数 \(l=n-2^m\) 满足 \(0≤l<2^{m+1}-2^m=2^m\)。

接下来我们考虑证明这个式子,我们对 \(m\) 用归纳法,当 \(m=0\) 时必有 \(l=0\),于是式 \((1.2)\) 的基础就是 \(F_1=1\),此结论为真。接着分奇偶性来归纳证明。

如果 \(m>0\) 且 \(2^m+l=2n\),则 \(l\) 定是偶数,根据式 \((1.1)\) 和归纳假设,有:

\(F_{2^m+l}=2F_{2^{m-1}+l/2}-1=2(2l/2+1)-1=2l+1\)。

如果 \(2^m+l=2n+1\),则 \(l\) 定是奇数,有:

\(F_{2^m+l}=2F_{2^{m-1}+( l-1)/2}+1=2(2(l-1)/2+1)+1=2l+1\)。

得证式 \((1.2)\)。

到此为止,我们解决了问题。

该问题补充

接下来我们探讨式 \((1.1)\) 和式 \((1.2)\) 的某些推广,揭示这背后的隐藏结构。

在我们求解的过程中,\(2\) 的幂起着重要的作用,所以自然来研究 \(n\) 与 \(F_n\) 的以 \(2\) 为基数的表示,把 \(n\) 用二进制来表示:

\(n=(b_mb_{m-1}...b_1b_0)_2\)

也就是说,\(n=b_m2^m+b_{m-1}2^{m-1}+...+b_12^1+b_02^0\)

其中 \(b_i\) 为 \(0\) 或 \(1\),而首位数字 \(b_m\)是 \(1\),注意 \(n=2^m+l\),于是我们依次就有:

\(n=(1b_{m-1}b_{m-2}...b_1b_0)_2\);

\(l=(0b_{m-1}b_{m-2}...b_1b_0)_2\);

\(2l=(b_{m-1}b_{m-2}...b_1b_00)_2\);

\(2l+1=(b_{m-1}b_{m-2}...b_1b_01)_2\);

\(F_n=(b_{m-1}b_{m-2}...b_1b_01)_2\);

因为 \(b_m=1\),又有 \(F_n=(b_{m-1}b_{m-2}...b_1b_0b_m)_2\)。

我们就证明出:

\(F_{(b_mb_{m-1}...b_1b_0)_2}=(b_{m-1}...b_1b_0b_m)_2\)

用计算机程序设计的行话来说就是,\(n\) 向左循环移动一位就得到 \(F_n\),这样的表达是不是比刚才的好理解多了?

\(plus\)

好的,我们已经非常了解函数 \(F\) 了,接下来我们对它加以推广,如果我们的问题产生了与式 \((1.1)\) 有些相像的递推式(不过有不同的常数),将会发生什么呢?我们引入常数 \(x,y,z\),则有

\(f_1=x\);

\(f_{2n}=2f_n+y\);----------\((1.3)\)

\(f_{2n+1}=2f_n+z\);

接下来我们力图对更加一般的递归式(1.3)求出一个封闭形式。

(原来的递归式中有 \(x=1,y=-1,z=1\))从 \(f_1=x\) 出发并按照我们的思路做下去,可以对小的 \(n\) 值构造出如下一般性的表:

\(n\) \(f_n\)
\(1\) \(x\)
\(2\) \(2x+y\)
\(3\) \(2x+z\)
\(4\) \(4x+3y\)
\(5\) \(4x+2y+z\)
\(6\) \(4x+y+2z\)
\(7\) \(4x+3z\)
\(8\) \(8x+7y\)
\(9\) \(8x+6y+z\)

看起来 \(x\) 的系数是不超过 \(n\) 的 \(2\) 的最大幂,同时,在 \(2\) 的幂之间,\(y\) 的系数递减 \(1\) 直到 \(0\),\(z\) 的系数则从 \(0\) 开始递增 \(1\)。就类似于二项式定理的 \(a,b\) 的指数。于是,如果把 \(f_n\) 对 \(x,y,z\) 的依存关系分离开来,我们就把它表示成形式:

\(f_n=A_nx+B_ny+C_nz\)。----------\((1.4)\)

看起来有:

\(A_n=2^m\);

\(B_n=2^m-1-l\);----------\((1.5)\)

\(C_n=l\)

如通常一样,这里有 \(n=2^m+l\) 以及 \(0≤l<2^m\)(\(n≥1\))。

我们考虑用归纳法证明 \((1.4)\) 和 \((1.5)\),同样分成奇偶性来证明:

如果 \(m>0\) 且 \(2^m+l=2n\),则 \(l\) 定是偶数,则有:

\(f_{2m+l}=2f_{2^{m-1}+l/2}+y=2(2^{m-1}x+(2^{m-1}-1-l/2)y+(l/2)z)+y=2^mx+(2^m-1-l)y+lz\)。

如果 \(2^m+l=2n+1\),则 \(l\) 定是奇数,有:

\(f_{2^m+l}=2f_{2^{m-1}+(l-1)/2}+z=2(2^{m-1}x+(2^{m-1}-1-(l-1)/2)y+((l-1)/2)z)+z=2^mx+(2^m-1-l)y+lz\)。

会发现算出来的 \(x,y,z\) 的系数与式 \((1.5)\) 的相同,得证。

当然,还有一种巧妙的方法,可以通过选取特殊值,并将它们组合起来,本文不再展开讲述。

我们知道原来的约瑟夫问题有个奇妙的解,写成二进制是:

\(F_{(b_mb_{m-1}...b_1b_0)_2}=(b_{m-1}...b_1b_0b_m)_2\),(\(b^m=1\))。

推广的约瑟夫问题是否也有这样奇妙的解呢?

令 \(\beta_0=y,\beta_1=z\),那么我们可以把推广的递推式 \((1.3)\) 改写成:

\(f_1=x\);

\(f_{2n+j}=2f_n+\beta_j\),\(j=0,1\),\(n≥1\)。----------\((1.6)\)

这个递推式写成二进制就是:

\(f_{(b_mb_{m-1}...b_1b_0)_2}=2f_{(b_mb_{m-1}...b_1)_2}+\beta_{b_0}\)

继续递归会有:

\(=4f_{(b_mb_{m-1}...b_2)_2}+2\beta_{b_1}+\beta_{b_0}\)

\(=...=2^mf_{(b_m)_2}+2^{m-1}\beta_{b_{m-1}}+...+2\beta_{b_1}+\beta_{b_0}\)

\(=2^mx+2^{m-1}\beta_{b_{m-1}}+...+2\beta_{b_1}+\beta_{b_0}\)。

现在我们解除二进制表示,允许任意的数字,而不仅是数字 \(0\) 和 \(1\),那么上述的推导告诉我们:

\(f_{(b_mb_{m-1}...b_1b_0)_2}=(x\beta_{b_{m-1}}\beta_{b_{m-2}}...\beta_{b_1}\beta_{b_0})_2\)。----------(1.7)

这里比较抽象,实际上这个值是等于:

\(2^mx+2^{m-1}\beta_{b_{m-1}}+2^{m-2}\beta_{b_{m-2}}+...+2^{1}\beta_{b_{1}}+2^{0}\beta_{b_{0}}\)。

很好,如果把刚才的表:

\(n\) \(f_n\)
\(1\) \(x\)
\(2\) \(2x+y\)
\(3\) \(2x+z\)
\(4\) \(4x+3y\)
\(5\) \(4x+2y+z\)
\(6\) \(4x+y+2z\)
\(7\) \(4x+3z\)
\(8\) \(8x+7y\)
\(9\) \(8x+6y+z\)

用另一种方式写成:

\(n\) \(f_n\)
\(1\) \(x\)
\(2\) \(2x+y\)
\(3\) \(2x+z\)
\(4\) \(4x+2y+y\)
\(5\) \(4x+2y+z\)
\(6\) \(4x+y+2z\)
\(7\) \(4x+2z+z\)
\(8\) \(8x+4y+2y+y\)
\(9\) \(8x+4y+2y+z\)

我们就能更早看到这种规律,从而推出循环移位性质。

所以,改变表示法使得我们对于一般的递推式 \((1.6)\) 给出了紧凑的解 \((1.7)\)。

\(plus^2\)

如果真的不受限制,我们进一步加以推广,递推式:

\(f_j=x_j\),\(1≤j<d\);

\(f_{dn+j}=cf_n+\beta_j\),\(0≤j<d\),\(n≥1\)。

与上一个递推式是相同的,除了这里是从基数为 \(d\) 的数入手,而产生的值使用基数 \(c\) 表示之外,这就是说,它有变动基数的解:

\(f_{(b_mb_{m-1}...b_1b_0)_d}=(x_{b_m}\beta_{b_{m-1}}\beta_{b_{m-2}}...\beta_{b_1}\beta_{b_0})_c\)。

(想要理解到这里是非常困难的,必须深刻体会和领悟)

于是,约瑟夫把我们引向了某种有趣的一般递归式。

写作目的

一方面是为了作者自身更深刻地体和领悟会这些知识。

另一方面发现在内网很难找到有关这类问题的文章,可以让更多的人了解到这些知识。

标签:...,4x,约瑟夫,问题,beta,1b,深入,2n,递推
From: https://www.cnblogs.com/Exotic-sum/p/17753176.html

相关文章

  • 前后端分离项目,跨域问题
    跨域问题当一个资源去访问另一个不同域名或者同域名不同端口的资源时,就会发出跨域请求。如果此时另一个资源不允许其进行跨域资源访问,那么访问就会遇到跨域问题。springboot项目默认不允许处理跨域请求,前端报错:hasbeenblockedbyCORSpolicy:Responsetopreflightrequest......
  • Vue组件各个属性执行顺序问题
    转自:https://blog.csdn.net/m0_62763606/article/details/131694339       在制作波动短视频效果时,在data中定义了一个变量,默认值为null。后来该变量在mounted中被赋值,而后在watch侦听属性中使用立即侦听时使用了该变量却显示为null,后发现这关系到各个组件属性执行顺序问......
  • 金蝶云星空插件项目新建类不写public修饰符的问题
     当类不屑修饰符时,生成dll后,bos平台注册时无法显示刚创建的类,也就无法选择。如下图:  结论:声明命名空间、类,前面不加限制访问修饰符时,默认访问权限为internal——访问仅限于当前程序集。 添加public修饰符后, 如图所见,可以选择到我们的目的类了。 完美。......
  • 操作系统之存储容量问题的解决(其实这道题并不难哈)
    例题展示例题解决在正式进行该题目的解决之前,我们需要先了解到16进制的运算法则:16进制在运算过程中,从右到左依次进行运算,不够则借位,大于16则进位;而这道题的解决方法:......
  • CPU飙升怎么办?解决定位问题的思路
     https://mp.weixin.qq.com/s/J_O5380MR06bYFJadxJRLw01线上服务器CPU飙升,如何定位到Java代码解决这个问题的关键是要找到Java代码的位置。下面分享一下排查思路,以CentOS为例,总结为4步。第1步,使用top命令找到占用CPU高的进程。第2步,使用ps–mp命令找到进程下占用CPU高的线......
  • wireshak常见问题
    作者:零声Github分享官链接:https://www.zhihu.com/question/264811393/answer/2594036023来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。流媒体播放中,常常需要借助wireshark从TCP层面对交互过程进行分析,本文记录一些常见的TCP异常报文及其分析。......
  • Echarts的地图实现拖拽缩放同步功能(解决多层geo缩放、拖动卡顿问题)
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metahttp-equiv="X-UA-Compatible"content="IE=edge"/><metaname="viewport"content="w......
  • clickhouse及gbase中文字段导出的问题
    【1】clickhouse及gbase中文字段导出可能出现换行或者乱码等情况导出时可以使用正则表达式替换特殊字符clickhouse:replace(replace(replaceRegexpAll(substring(coalesce(XXXX,''),1,2),'"|\'|\\|/||\|',''),char(10),''),char(13),'')gbase:......
  • archlinux 使用时遇到的问题
    link:https://www.notion.so/0621e8837f0a4a9bb846f1fad37d94a4notionID:0621e883-7f0a-4a9b-b846-f1fad37d94a41.一、telegram模糊,且在hidpi存在缩放问题https://wiki.archlinux.org/title/Telegram_(简体中文)https://wiki.archlinuxcn.org/wiki/桌面项根据27点将des......
  • ETL安装和一些常见问题
    安装ETL需要安装Kettle和JDK1,ETL我使用的是 pdi-ce-8.3.0.0-371,可以去KETTLE官网找一下或者用 https://www.ylmfwin8.com/soft/50783.html下载的8.2版本2,ETL下载完成后,解压到本地即可(不要有中文路径)3,JDK在网上找一个即可,我使用的是JAVA8(ETL版本和JDK版本应该是有对......