Longest Run Tosses Matlab
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Write an efficient function which computes the length of the longest run of heads in an arbitrary sequence of heads and tails ?
The excercise is about a coin toss and i would really appreciate if someone could help me with this excercise.
6 comentarios
madhan ravi
el 5 de Jun. de 2020
KBB it's really clear that your professor found this link ;) and thank you for disrespecting others effort.
Respuestas (3)
Walter Roberson
el 5 de Jun. de 2020
at any one time you only need a few pieces of information:
- are you currently in a run
- length of the current run
- maximum length of run encountered so far
if you are not in a run and you encounter a T then move on to the next entry
if you are in a run and you encounter a T then compare the length of the current run to the maximum so far to determine if you have a new record. Afterwards either way mark yourself as no longer being in a run. then move on to the next entry.
if you are in a run and encounter a H then increment the length of the current run. Then move on to the next entry.
I left out a detail that you should be able to catch.
You can get away with using just two variables aside from the loop index.
0 comentarios
KSSV
el 5 de Jun. de 2020
Editada: KSSV
el 5 de Jun. de 2020
N = 2 ; % [1- heads, 2-tails]
toss = 100 ; %number of tossings
state = zeros(toss,1) ;
for i = 1:toss
state(i) = randperm(N,1) ;
end
% split the states which are continuous 1 and/or 2
S = mat2cell(state, diff([0; find(diff(state)); size(state,1)]));
% Get the length of sequence of states
L = cellfun(@length,S) ;
% Get the maximum length sequence
[val,id] = max(L) ;
fprintf("State:%d is repeated maximum of %d times\n",unique(S{id}),val)
2 comentarios
KSSV
el 5 de Jun. de 2020
You should understand first how/ what the code is.
Thanks is accepting the answer. :)
Stephen23
el 5 de Jun. de 2020
Editada: Stephen23
el 5 de Jun. de 2020
Simpler and more efficient:
>> N = 17; % number of tosses
>> V = randi(2,1,N) % 1=tails 2=heads
V =
2 1 2 2 2 2 2 2 1 1 2 2 1 1 1 2 2
>> D = diff([false,V==2,false]); % 2=heads
>> L = find(D<0)-find(D>0);
>> max(L)
ans = 6
0 comentarios
Ver también
Categorías
Más información sobre Get Started with MATLAB en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!