解决复发复发

时间:2013-04-16 19:30:05

标签: algorithm discrete-mathematics recurrence josephus

好的,我正在努力克服Knuth的混凝土数学,还有一些我还不了解的例子。

J(n)= 2 * J(n / 2)-1

它来自第一章。它可以为那些熟悉混凝土数学的人解决约瑟夫问题。有一个解决方案,但绝对没有解释。 我尝试用迭代法解决它。这是我到目前为止所提出的

J(n)=(2 ^ k)* J(n /(2 ^ k)) - (2 ^ k - 1)

我被困在这里。任何帮助或提示将不胜感激。

3 个答案:

答案 0 :(得分:3)

我会先回想起约瑟夫斯问题。

我们有 n 人聚集在一起。执行者将以下列方式处理圆圈:

  1. 刽子手从位置i = 1
  2. 的人开始
  3. 当我处于第i位置时,他饶了我但杀死了我跟随的人
  4. 他执行此操作直到只有一个人还活着
  5. 通过快速查看此程序,我们可以看到处于偶数位置的每个人都将在第一次运行中被杀死。当所有“偶数”都死了,谁是剩下的人?那么它取决于n的平价。

    如果n是偶数(比如n = 2i),那么其余的人是1,3,5,...,2i-1。剩下的问题是我的人而不是n的圈子。让我们在“新”圆圈中的位置和n个圆圈中的初始位置之间引入一个映射图 even

      

    map 甚至(x)= 2.x - 1

    这意味着新圆圈中x位置的人在初始位置的位置为2.x - 1。如果幸存者在新圈子中的位置是J(i),那么某人必须占据的位置才能在n = 2.i人的圈子中生存

      

    map 甚至(J(i))= 2.J(i) - 1

    我们有第一个递归规则:

      

    对于任何整数n:
      J(2.n)= 2.J(n)-1

    但是如果n是奇数(n = 2.j + 1),那么第一次运行最终会杀死所有“均匀”并且执行者处于位置n。 n追随者是1 ...因此,下一个被杀死的是1.幸存者是3,5,...,2j + 1并且刽子手继续进行,好像我们有一个j圈的人。映射与偶数情况略有不同:

      

    map odd (x)= 2.x + 1

    3是新的1,新的2,等等......

    如果幸存者在j圈中的位置是J(j),那么想要在n = 2j + 1的圆圈中存活的人必须占据位置J(2j + 1):

      

    J(2j + 1)= map odd (J(j))= 2.J(j)+ 1

    绘制第二个递归关系:

      

    对于任何整数n,我们有:
      J(2.n + 1)= 2.J(n)+ 1

    从现在开始,我们可以使用2个递归关系计算 ANY 整数n的J(n)。但如果我们再看一点,我们可以做得更好......

    因此,对于每个n = 2 k ,我们有J(n)= 1.好的,但是对于其他数字?如果你写下第一个结果(比如说n = 20),你会看到序列似乎是伪周期性的:
    1 2 3 4 5 6 7 8 9 10 11
    1 1 3 1 3 5 7 1 3 5 7

    从2的幂开始,似乎位置在每一步增加2,直到下一次2的幂,我们从1再次开始...因为,给定一个整数n,有一个唯一的整数m( n)这样

      

    2 m(n)≤n<2。 2 米(N)+1

    令s(n)为整数,使得n = 2 m(n) + s(n)(我称之为“s”代表“shift”)。 我们观察的数学翻译是J(n)= 1 + 2.s(n)

    让我们用强感应来证明它 对于n = 1,我们有J(1)= 1 = 1 + 2.0 = 1 + 2.s(1)
    对于n = 2,我们有J(2)= 1 = 1 + 2.0 = 1 + 2.s(2)

    假设任何k的J(k)= 1 + 2.s(k)使得k∈[1,n],我们证明J(n + 1)= 1 + 2.s(n + 1)

    我们有n = 2 m(n + 1) + s(n + 1)。显然,2 m(n)是偶数(除非在n = 1的平凡情况下),因此n的奇偶性由s(n)承担。

    如果s(n + 1)是偶数,则我们表示s(n + 1)= 2j。我们有

      

    J(n + 1)= 2.J((n + 1)/ 2) - 1 = 2.J(2 m(n + 1)-1 + j) - 1

    由于该陈述对于任何k∈[1,n]都是正确的,因此1≤k=(n + 1)/ 2 <1。 n因此:

      

    J(n + 1)= 2.(2j + 1) - 1 = 2.s(n + 1)+ 1

    我们可以类似地解决奇怪的情况。 为任何整数n建立公式:

      

    J(n)= 2.s(n)+ 1,其中m(n),s(n)∈ℕ这是唯一的整数   2 m(n)≤n<2。 2 m(n)+1 和s(n)= n - 2 m(n)
      换句话说:m(n)=⌊ln 2 (n)⌋和s(n)= n - 2 ⌊ln 2 (n)⌋< / SUP>

答案 1 :(得分:1)

从一些简单的例子开始,做出猜测,然后使用归纳来(dis)证明你的猜测。

考虑n = 2的幂。

J(2 ^ 0)= 1(给定)

J(2 ^ 1)= 2J(2 ^ 0) - 1 = 1

J(2 ^ 2)= 2J(2 ^ 1) - 1 = 1

好吧,让我们猜测所有n&gt; = 1的J(n)= 1。

基本情况:J(1)= 1,根据定义为真。

归纳步骤:对于某些任意k,假设J(k)= 1。然后J(2k)= 2J(k)-1 = 1。

因此,通过归纳,对于所有n,J(n)= 1(假设分割舍入为整数)。

答案 2 :(得分:0)

J(n)=2*J(n/2)-1

J(n)-1=2*J(n/2)-2

J(n)-1=2*(J(n/2)-1)

T(n)=2*T(n/2),其中T(n)=J(n)-1

T(n)=2^log2(n)*T(1)

J(n)=2^log2(n)*(J(1)-1)+1