Look and Say Sequence에 관해서 나는 일관을 가장 싫어한다

9363 단어 SequencePython

개시하다


가끔 아이들에게 산수, 수학에 관한 이야기를 할 기회가 있지만, 수열을 말할 때 꼭 하고 싶은 좋아하는 수열을 Look and Say Sequence(보기엔 수열)로 간략하게 정리해보자.
이 몇 열의 성질 중에는 존 호튼 콘웨이(John Horton Conway)가 분명히 한 성질이 있지만, 콘웨이는 지난해 코로나바이러스로 사망했다.
콘웨이 하면 생태계 시뮬레이션 프로그램'필생 게임'이 탄생해 유명한 수학자다.이렇게 위대한, 과학·기술 방면에서 위대한 쪽이 일관에서 잃어버려서 정말 슬프다.
3월 21일 두 달 반 동안 이어진 코로나 긴급사태 선언을 해제했지만 그 이후에는 어떻게 될까.
원격근무를 계속하느라 고생이 많았지만 열심히 공부해야 했어요

이른바 Look and Say Sequence

1, 11, 21, 1211, 111221, 312211, 13112221,・・・
이런 수열을 Look and Say Sequence라고 합니다.
이 몇 열은 앞의 (look)설(say)을 볼 수 있는 것에 근거하여 다음 숫자를 결정한다.

\begin{align}
1&・・・初項 \\
11&・・・前項が 1つの1 \\
21&・・・前項が 2つの1 \\
1211&・・・前項が 1つの2と1つの1 \\ 
111221&・・・前項が 1つの1と1つの2と2つの1 \\   
\end{align}

첫 번째 항목이 5시이면 다음과 같다.(캉웨이 선생의 논문 도입은 55555에서 시작되었다)
55555, 55, 25, 1215, 11121115,・・・
첫 번째는 22인 상황에서 변화가 없었다.아래와 같다.
22,22,22・・・
그나저나 초등학생과 중학생은 매번 다음과 같은 형식으로 질문을 한다.
1, 11, 21, 1211, 111221, ?
대략적으로 50명 중 2, 3명은 정답을, 1명은 몇 분, 몇 십 분을 거치면서 알게 됐고, 1명은 매일 고민하며 정답을 유도했다.아이도 무서워한다.(열심히 공부해야 하는데...)
참고로 구글 입사 시험에 나왔어요.

python으로 써볼게요.


def cal(x):
    r = []
    l = [1, x[0]] 
    for n in (x + "x")[1:]:
        if n is l[1]:
            l[0] += 1
        else:
            r.extend(l)
            l = [1, n]
    return "".join(map(str,r))

def look_and_say(a1, n):
    s = str(a1)
    r = [str(a1)]
    for i in range(n-1):
        s = cal(s)
        r.append(s)
    return r
실행하다
n = 10
print(look_and_say(1, n))
// 実行結果
['1', '11', '21', '1211', '111221', '312211', '13112221', '1113213211', '31131211131221', '13211311123113112211']

Look and Say Sequence의 성격


수열에는 1, 2, 3을 제외한 숫자가 나오지 않는다.
"자릿수가 줄어들지 않아요".
"자릿수 무한대로 발산".
기다리다
제일 재밌었던 게...
\lim_{n \to ∞} \frac{l_{n+1}}{l_n} =λ \\

λ = 1.303577・・・(コンウェイの定数)
왜 이렇게 변했는지 정말 불가사의하다.

이른바 망관 상수


\begin{align}
x ^ {71} &&&&-x ^ {69} &&-2x ^ {68} &&-x ^ {67} && + 2x ^ {66} && + 2x ^ {65} && + x ^ {64} &&-x ^ {63}\\
-x ^ {62} &&-x ^ {61} &&-x ^ {60} &&-x ^ {59} && + 2x ^ {58} && + 5x ^ {57} && + 3x ^ {56} &&-2x ^ {55} &&-10x ^ {54} \\
-3x ^ {53} &&-2x ^ {52} && + 6x ^ {51} && + 6x ^ {50} && + x ^ {49} && + 9x ^ {48} &&-3x ^ {47} &&-7x ^ {46} &&-8x ^ {45} \\
-8x ^ {44} && + 10x ^ {43} && + 6x ^ {42} && + 8x ^ {41} &&-5x ^ {40} &&-12x ^ {39} && + 7x ^ {38} &&-7x ^ {37} && + 7x ^ {36} \\
+ x ^ {35} &&-3x ^ {34} && + 10x ^ {33} && + x ^ {32} &&-6x ^ {31} &&-2x ^ {30} &&-10x ^ {29} &&- 3x ^ {28} && + 2x ^ {27} \\
+ 9x ^ {26} &&-3x ^ {25} && + 14x ^ {24} &&-8x ^ {23} &&&&-7x ^ {21} && + 9x ^ {20} && + 3x ^ {19} &&-4x ^ {18} \\
-10x ^ {17} &&-7x ^ {16} && + 12x ^ {15} && + 7x ^ {14} && + 2x ^ {13} &&-12x ^ {12} &&-4x ^ {11} &&-2x ^ {10} && + 5x ^ {9} \\ 
&& + x ^ {7} &&-7x ^ {6 } && + 7x ^ {5} &&-4x ^ {4} && + 12x ^ {3} &&-6x ^ {2} && + 3x &&-6 
\end{align}

가장 큰 것.

matplotlib으로 보여드릴게요.


코드는 다음과 같습니다.
import matplotlib.pyplot as plt

#
# <省略>
#

n = 20
x = list(range(1, n + 1))
list = [1 ,13, 23, 312, 55555]
for a1 in list:
    s = look_and_say(a1, n)
    plt.plot(x, [len(d) for d in s], label=f'a1={a1}')

plt.yscale('log')
plt.legend()
plt.show()


네.예쁘다.
50항까지 해보면 1.303에 가깝다.놀라다.
$\frac{l_{20}}{l_{19}}$
$\frac{l_{30}}{l_{29}}$
$\frac{l_{40}}{l_{39}}$
$\frac{l_{50}}{l_{49}}$
a1=1
1.337
1.309
1.304
1.303
a1=13
1.313
1.314
1.305
1.303
a1=23
1.226
1.299
1.305
1.304
a1=312
1.244
1.313
1.309
1.304
a1=55555
1.334
1.316
1.305
1.303

좋은 웹페이지 즐겨찾기