How can I calculate 5 lions in a row?

4 ビュー (過去 30 日間)
S.M
S.M 2022 年 10 月 13 日
回答済み: Image Analyst 2022 年 10 月 14 日
Question:A fair coin is tossed 10 times. What is the probability of getting exactly 5 lions in a row? ( 6 times in a row Don't count the number of taps or more.)
my code:
clear all
close all
clc
for i=0:1023
x=fliplr(de2bi(i));
coin(i+1,:)=[ zeros(1,10-length(x)) x ];
end
% =============================================
z=0;
yek=zeros(1,1024);
for i=1:1024
x=coin(i,:);
for j=1:10
if(x(:,j)==1)
z=z+1;
yek(1,i)=z;
end
end
z=0;
end
yek=yek';
y=zeros (253,1);
m=0;
for i=1:1024
if yek(i,:)>=5
y(m+1,1)=i;
m=m+1;
end
end
c=0;
q=0;
for i=y'
x=coin(i,:);
c=0;
n=0;
% ===============================
for j=1:9
if x(1,j)==1 && x(1,1+j)==1
c=c+1;
else c=0;
end
if c==4
n=4;
end
end
if n==4
q=q+1;
end
w(i,1)=c;
e(i,:)=x ;
end
my question:How can I extract 5 lions in a row through generated states?

採用された回答

Torsten
Torsten 2022 年 10 月 13 日
編集済み: Torsten 2022 年 10 月 13 日
n = 1024;
S = 0:(n-1); % 2^10 possible sequences of coin tosses.
A = de2bi(S);
A = [zeros(n,1),A,zeros(n,1)];
nn = 0;
for i = 1:size(A,1)
idx = strfind(A(i,:),[0 1 1 1 1 1 0]);
if ~isempty(idx)
nn = nn + 1;
end
end
format long
fraction = nn/n
fraction =
0.062500000000000
  2 件のコメント
John D'Errico
John D'Errico 2022 年 10 月 13 日
But there is no need to do a large simulation though, since the entire problem space contains only 1024 possible sequences, each of which is equally probable.
Torsten
Torsten 2022 年 10 月 13 日
Correct. I borrowed some code of yours :-)

サインインしてコメントする。

その他の回答 (2 件)

John D'Errico
John D'Errico 2022 年 10 月 13 日
編集済み: John D'Errico 2022 年 10 月 13 日
I'm so used to coins having heads or tails though. ;-) I guess I can deal with lions.
Anyway, your code gets at the question at hand, but you can make it simpler.
S = 0:1023; % 2^10 possible sequences of coin tosses.
sequences = de2bi(S)
sequences = 1024×10
0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0
I dropped the semicolon so we could see the first few sequences. All you need now is to count the number of sequences where there were at least 5 tosses in a row.
Probably it is easiest here to just use a loop, despite the fact that it COULD be vectorized.
count5 = 0;
for i = 1:2^10
count5 = count5 + ~isempty(strfind(sequences(i,:),ones(1,5)));
end
count5
count5 = 112
count5/2^10
ans = 0.1094
Look carefully at the inner line of code there. It uses strfind to identify sequences that have a sub-sequence of length 5, that matches the string of interest. Since all you care about is that it finds a sub-sequence of length at least 5, this is adequate. Then the ~isempty call retiuurns true, when such a sequence was found.
  2 件のコメント
Torsten
Torsten 2022 年 10 月 13 日
編集済み: Torsten 2022 年 10 月 13 日
What is the probability of getting exactly 5 lions in a row?
John D'Errico
John D'Errico 2022 年 10 月 13 日
編集済み: John D'Errico 2022 年 10 月 13 日
Oops. I missed the word exactly. But that is easy enough to fix. Appending a 0 at each end, and then searching for the subsequence [0 1 1 1 1 1 0] is the solution that I would use. Since I see Torsten does exactly that, he is correct.

サインインしてコメントする。


Image Analyst
Image Analyst 2022 年 10 月 14 日
Yet another way (Monte Carlo)
numExperiments = 100000
numTosses = 10
tosses = randi([0, 1], numExperiments, numTosses);
maxLength = zeros(numExperiments, 1);
% Find the lengths of each run of 1's
for k = 1 : numExperiments
if nnz(tosses(k, :)) == 0
continue;
else
props = regionprops(logical(tosses(k, :)), 'Area');
maxLength(k) = max([props.Area]);
end
end
fraction5 = sum(maxLength == 5) / numExperiments
fraction5 =
0.06296

カテゴリ

Help Center および File ExchangeMonte Carlo Analysis についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by