2.2.27

(a)

いっぱい円を描いて実験すると次のようになる。

nn 2 3 4 5 6 7 8 9 10 11 12 13
j(n)j(n) 1 3 1 3 5 7 1 3 5 7 9 11
nn 14 15 16 17 18 19 20 21 22 23 24 25
j(n)j(n) 13 15 1 3 5 7 9 11 13 15 17 19

16までは円を描いたがそこまでで規則性は見えたので17以降は以下のプログラム(python)で確認をした。

for n in range(2,25+1,1):
    xs = list(range(1,n+1))

    skip_num = 2
    i = -1
    for _ in range(n-1):
        for num in range(skip_num):
            i = (i+1) % n
            while xs[i] == None: i = (i+1) % n
        xs[i] = None
    ans = []
    for i in range(n):
        if xs[i] != None:
            ans.append(xs[i])
    print(n, ans)

(b)

n=2in=2^iのとき11となっていること、そこから2ずつ増えていること、また偶数が出てこないことが分かる。 円を描いてみると分かるが、最初の1巡目で偶数番目の人が消え、2巡目以降はそれまでに消えた人を無視して数字を再度時計回りに付け替えると やはり偶数番目の人が消えることになる。 このことからnnの偶奇で再帰的にj(n)j(n)は定まりそうに見える。

nnが偶数のときを考え、n=2kn=2kとする。このとき1巡目で2,4,,2k12,4,\ldots,2k-1が消え、残った1,3,,2k11,3,\ldots,2k-1で再度1から順番に始めることになる。 この残った人間に1,2,,k1,2,\ldots,kと新しく割り当てる。このとき新しくiiが割当てられた人の元の番号は2i12i-1である。 新しく割り当てた番号の1から同じように始まるので再帰的に計算ができて最後に残るのはj(k)j(k)である。 これらからj(n)=2j(k)1=2j(n2)1j(n) = 2j(k)-1 = 2j(\frac{n}{2})-1と分かる。

次にn=2k+1n=2k+1と奇数のときを考える(但しn>1n>1)。 このとき1巡目で2,4,,2k,12,4,\ldots,2k,1が消え、残るのは3,,2k+13,\ldots,2k+1である。 この場合は次は3から始めることになる。 そこで3,5,,2k+13,5,\ldots,2k+1を新しく1,2,,k1,2,\ldots,kと割り当てる。 このとき新しくiiが割当てられた人の元の番号は2i+12i+1である。 先と同じ議論によりj(n)=2j(k)+1=2j(n2)+1j(n) = 2j(k) + 1 = 2j(\lfloor\frac{n}{2}\rfloor)+1となる。

これらより以下の漸化式を得る。

j(n)={2j(n2)1if n is even2j(n2)+1if n is odd j(n) = \begin{cases} 2j(\left\lfloor\frac{n}{2}\right\rfloor)-1 & \text{if n is even} \\ \\ 2j(\left\lfloor\frac{n}{2}\right\rfloor)+1 & \text{if n is odd} \end{cases}

この式を見るとnnを2で割り小数部を無視(右シフト)したもののみに依存しているので、1を根とする完全二分木にすると 規則性が見えそうである。実際に書いてみると各深さにおいて一番左の頂点が1となり、右の兄弟(姉妹)に移るにつれて2ずつ増えることが分かる。

よってj(n)=2(n2p)+1j(n) = 2(n - 2^p) + 1と予測できる(ただしppは自然数で2pn<2p+12^p \leq n < 2^{p+1})。 これはppに関する帰納法で示せる。

results matching ""

    No results matching ""