カエルの問題(YouTubeビデオのパズル)


8

YouTubeビデオに面白いパズルがあります。カエルの問題を解決できますか?。ここでは同等の定式化を試みます。

カエルは池の片側にいて、反対側に乗りたいと思っています。ユリの葉は列あり、番目の葉は池の反対側にあり、目的地です。カエルの位置がいつであっても、カエルは前進するだけで、その前に残った葉の1つ(目的地を含む)に着地する確率は一定です。したがって、たとえば、10個の葉が先にある場合、がそれらのいずれかに着地する可能性があります。nn110

カエルが目的地の葉に到着するのにかかるジャンプ数の期待値はどれくらいですか?答えは再帰的な表現であってはなりません。

解決策はあると思いますので、以下に回答として報告します。

回答:


2

これは興味深い問題であり、polettixは予想されるジャンプ数を見つけるという当面の問題に対する解決策を提供します。最後の百合に到達するのにかかる時間の分布のより広い問題を見てみましょう。この広範な分析により、あらゆる状態の確率と分布のあらゆる瞬間を見つけることができます。

この分析は、離散マルコフ連鎖の吸収状態の「ヒット時間」の分布を見つける問題として組み立てることができます。このマルコフ連鎖を統計ソフトウェアでプログラムし、結果として得られるヒット時間の分布を抽出することは比較的簡単で、カエル問題の完全なソリューションを提供します。


問題をマルコフ連鎖として設定する:問題を設定するには、状態を使用しここで、状態は川岸のカエルで、残りの状態はカエルが百合のパッドそれぞれいるためのものです。私たちは聞かせては問題のランダムプロセスであり、カエルはジャンプ直後にリリーパッドにいます。このプロセスは、遷移確率行列を持つ厳密に単調な離散マルコフチェーンです。x=0,1,2,...,nx=01,...,n{Xt|t=0,1,2,3,...}Xtt(n+1)×(n+1)

P=[01/ん1/ん⋯1/ん1/ん1/ん001/(ん−1)⋯1/(ん−1)1/(ん−1)1/(ん−1)000⋯1/(ん−2)1/(ん−2)1/(ん−2)⋮⋮⋮⋱⋮⋮⋮000⋯01/21/2000⋯001000⋯001]。

最後のユリパッドへのジャンプの数は、状態ヒット時間です。ん

T≡分{t∈N|バツt=ん}。

私たちの目標は、カエル問題の完全な解決策を提供する確率変数の確率質量関数を見つけることです(つまり、最後のユリパッドへのジャンプ数の動作を完全に記述します)。T


確率質量関数の:カエルはジャンプごとに少なくとも1つのするため、最後のに到達するには最大ジャンプかかるため、です。この時間の累積分布関数は次のとおりです。ん1⩽T⩽ん

FT(t)=P(T⩽t)=P(バツt=ん)=[Pt]0、ん。

したがって、時間の確率質量関数は次のとおりです。

pT(t)={1/んために t=1、[Pt]0、ん−[Pt−1]0、んために t>1。

この質量関数は、カエルが最後の百合に到達するのにかかる時間の分布を完全に記述しているため、カエル問題の完全な解決策と見なすことができます。計算を容易にするために、この分布を関数Rとしてプログラムできdfrogます。これは、引数ベクトルTとパラメーターの確率質量関数から値を生成するベクトル化された関数ですn。

dfrog <- function(n, T = 1:n) {

#Create transition probability matrix
P <- matrix(0, nrow = n+1, ncol = n+1);
for (i in 1:n) { 
for (j in i:n) { 
    P[i, j+1] <- 1/(n+1-i);  } }
P[n+1, n+1] <- 1;

#Generate CDF and PMF vectors
PP  <- P;
CDF <- rep(0, n);
for (t in 1:n) {   
    CDF[t] <- PP[1, n+1];
    PP <- PP %*% P; }
PMF <- diff(c(0, CDF));

#Generate output vector
OUT <- rep(0, length(T));
for (i in 1:length(T)) { OUT[i] <- PMF[T[i]]; }

OUT; }

この関数を使用して、確率質量関数を生成およびプロットできます。以下のプロットは、ユリパッドがある場合のジャンプ数の分布を示しています。見られるように、この場合、カエルは通常3〜4ジャンプで最後のユリのパッドに到達します。 ん=20

ここに画像の説明を入力してください

#Load ggplot and set theme
library(ggplot2);
THEME <- theme(plot.title    = element_text(hjust = 0.5, size = 14, face = 'bold'),
               plot.subtitle = element_text(hjust = 0.5, face = 'bold'));

#Plot the PMF
n    <- 20;
DATA <- data.frame(Jumps = 1:n, Probability = dfrog(n));
ggplot(aes(x = Jumps, y = Probability), data = DATA) + 
    geom_bar(stat = 'identity', fill = 'darkgreen') +
    THEME +
    ggtitle('PMF of number of jumps to last lily-pad') +
    labs(subtitle = paste0('(Frog problem with n = ', n, ' lily-pads)'));

2

予想される数に対して再帰的な関係を使用する代わりに 、カエルがとることができるすべてのパスと確率の分布を計算することにより、より機械的なアプローチを試すこともできますジャンプした後のカエルの位置の。Jん=Jん−1+1んk

これは、マルコフ連鎖を使用してすばやく計算できます。

# stochastic Matrix
M <- pracma::Toeplitz(c(0,rep(1,10)),rep(0,11)) / c(1,1:10) 
M[1,1] <- 1                                               

# positions of frogs after k steps
V <- c(rep(0,10),1)
Vm <- sapply(0:10, FUN = function(k) V %*% (M %^% k))

# mean number of steps by computing 1-F(0)
sum(1-Vm[1,])

与える2.928968

番目のステップで「finish-leaf」から距離ある確率の質量分布は、次のようになります。p(バツ、k)バツk

ここに画像の説明を入力してください


この方法には1つの欠点があります。ステップ数の期待値がn番目の調和数等しいという、最終的な魅力的な結果を導き出すことは非常に簡単ではありません。Σk=1ん1/k

コメントで、これらの分布は多項式関数のようになると提案しました。しかしそれは間違っています。より複雑です。p(バツ、k)

分布は次の関係に従います。

p(バツ、k)=Σy=バツ+1Np(y、k−1)j

ここで、は番目のステップでのカエルの位置の確率の合計であり、は葉の数です(から一般化)。この関係を開始するには、を使用します。p(バツ、k)(k−1)NN=10p(N、0)=1

これは次のように拡張できます

p(バツ、k)=1NΣl1=バツ+1N−kΣl2=l1+1N−k+1。。。Σlk=lk−1+1N−11l1⋅l2⋅。。。lk

これは、調和数のある種の一般化です。

よりコンパクトに表現できます

p(バツ、k)=1NΣS∈Sk、[バツ、。。。、N−1]Πa∈S1a

和が全てのkのサブセット上にあるに、すべてのkサブセットのセット、及びproductはサブセットすべての数超えています。たとえば、サブセットは、カエルが位置10から、および3にジャンプしたことを表します。カエルがこのパスをたどる確率は。SSk、[バツ、。。。、N−1][バツ、。。。、N−1]aS{3、5、7}110⋅7⋅5⋅3

ここから続けて最終結果を得る方法はまだわかりません...再帰的な関係を使用できると思います。


1

先に葉があるとき、ジャンプの期待値と呼びます。また、を設定しましたこれは、カエルの前に葉がない場合、目的地に到着するためにジャンプを正確にする必要があるという事実と一致しています。JんんJ0=00

目的地からの距離に応じて、葉に名前/番号を付けます。先が葉になりますので、、直前1とその葉までの上カエルの目の前で一つです。合計葉があり、1つの跳躍でそれらのいずれかにジャンプする確率は、パズルの指示に従ってです。01ん−1ん1ん

カエルがこの最初の跳躍を行うとき、カエルはで葉に着陸し、その時点から、残りの跳躍の期待値はます。これらのイベントは相互に排他的であることを考えると、次のようになります。kk∈{0、。。。ん−1}Jk

Jん=Σk=0ん−11ん(1+Jk)

ここで、は位置に到達する最初の跳躍を表します。合計には要素があるため、次のように再配置できます。1kん

Jん=1+1んΣk=0ん−1Jk

これは確かに少し再帰的すぎます。単純な計算で、さらに次のように並べ替えることができます。

ん(Jん−1)=Σk=0ん−1Jk

この関係は一般的であり、代わりに書き換えることもできます。ん−1ん

(ん−1)(Jん−1−1)=Σk=0ん−2Jk

私たちが得る2つの関係を引く:

ん(Jん−1)−(ん−1)(Jん−1−1)=Σk=0ん−1Jk−Σk=0ん−2Jk=Jん−1

あれは:

ん(Jん−1)=(ん−1)(Jん−1−1)+Jん−1=んJん−1−(ん−1)
Jん−1=Jん−1−ん−1ん
Jん=Jん−1+1ん

まだ再帰的ですが、少なくとも番目の要素は番目の要素のみで表現されます。んん−1

あることを考えると、上記の関係は次のように折りたたむことができます。J0=0

Jん=Σk=1ん1k

これがパズルの答えです。


2
さらに短く、直感的に推論することもできます。彼の前に葉があるカエルは、前に個の葉があるカエルと同じオプションに加えて、最初に追加のステップを実行する必要があるオプション(最初に彼の前を離れます。彼の前のカエルにはありません)確率。したがって、は直接推論できます。んん−11/んJん=Jん−1+1/ん
— Sextus Empiricus

1
そして、カエルも同じ場所に留まることができるとき、今、同じパズルをしてください。
— Sextus Empiricus

1
カエルも1ステップ後退できる場合、に至る
Jん=Jん−1∗(ん−1)/(ん+1)+(Jん+1)/(ん+1)+(Jん+1+1)/(ん+1)
Jん+1=んJん−(ん−1)Jん−1
— セクストス・エンペイリコス

1
最終的な方程式は、代わりにdenomにを持つ必要がありますkん
— L.スコットジョンソン

3
@whuber最終式がを使用する反復プロセスを必要とするという事実は必ずしもそれを反復関係にするわけではありません(たとえば、リンクした記事では、反復関係はとして明示的に示されてい)。合計の間に、必要に応じて項を並べ替えることもできますが、これは、反復関係のみを利用することでは不可能です。O(ん)Hん+1=Hん+1ん+1
— ポレッティックス

1

Martijn Weteringsと同様に、「すべての可能性を計算する」アプローチを試みました。

最初、カエルには確率でそれぞれ選択肢があります。その後、残りの選択肢は最初の選択肢によって異なります。しかし、残りのステップの確率のセットは簡単に確認できます。これは、のパワーセットの逆数です。ん1ん{1、。。。、ん−1}

つまり、場合、各ステップの確率は(逆数)です。ん=3

{3}
-1 つのジャンプ3 {3、1}-2のジャンプ(1/3の確率)、次に1のジャンプ(1/1の確率)
{ 3、2 }-1の次に2
{ 3、2、1}-1、1、1

これらの期待値は、セットの要素の積で割ったセットのサイズです。

各セットは常にで始まるため、合計から外します。ん

n番目の葉に到達するジャンプの予想数は次のとおりです。

1んΣバツ∈P({1、。。。、ん−1})|バツ|+1Πバツ

このフォームをフォームに単純化するためにどのようなアプローチを使用できるかわかりませんが、私が試した 2つのチェックの同等性( 2、3、10、20)

Σk=1ん1k
ん

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.