MAC110 - Introdução à Computação

BCC - 1o. Semestre de 1999

Exercício-Programa 3

Penney-Ante

Sinopse

Descrição deste Exercício

ep3a

A entrada para esta versão de seu programa é formada por um padrão de caras e coroas, como por exemplo HTHH, um inteiro positivo n e uma semente seed (para o gerador de números aleatórios).

No caso n = 1, o seu programa ep3a deve simular uma seqüência de lances de uma moeda honesta (i.e., com probabilidade 1/2 de dar tanto cara como coroa) até que o padrão dado ocorra. O seu programa deve imprimir o comprimento da seqüência de caras e coroas gerada, isto é, o número de vezes que a moeda foi lançada, até o padrão dado ocorrer. Veja aqui como o fun_ver_modif pode ser usado.

Quando n > 1, o seu programa ep3a deve executar n experimentos e registrar o resultado (i.e., o número de lances da moeda) em cada caso. Ele deve imprimir a média destes valores. Por exemplo, para a entrada HTHH, seed = 31415 e n = 10, o resultado deve ser 32.4 (os resultados dos 10 experimentos são, respectivamente, 48 61 9 46 13 24 66 15 23 19. Veja aqui). Para a entrada HTHH, seed = 31415 e n = 100000, o resultado deve ser 17.9264.

ep3b

A entrada para esta versão de seu EP3 deve ser formada por dois padrões, digamos p1 e p2, uma semente seed, e um inteiro positivo n. O seu programa ep3b deve simular o jogo Penney-Ante com os dois padrões dados, usando seed para inicializar o gerador de números aleatórios gb_flip. O programa deve, na verdade, simular n jogos com estes padrões (com gb_flip inicializado uma única vez, naturalmente).

Ao término destas n simulações, o programa deve dizer quantas vezes cada um dos padrões venceu. O programa também deve imprimir a razão entre o número de vitórias do padrão p1 e n. Note que esta razão é uma estimativa para a probabilidade do padrão p1 ser `melhor' que o padrão p2 neste jogo (isto é, para a probabilidade de p1 ocorrer antes de p2 em uma seqüência aleatória).

Escrevamos P(p1, p2) para a probabilidade do parágrafo anterior. Existe uma fórmula para esta probabilidade; você pode ver, por exemplo, o programa fun_ver. Esta fórmula, devida a J.H. Conway, está além do escopo desta disciplina, e portanto nós nos contentaremos com as estimativas que obteremos usando o ep3b para valores grandes de n.

O programa fun_ver_modif pode ser usado para ver como tais estimativas se comparam com o resultado teórico. Veja nestes arquivos como usar este programa: exemplo3b1.txt, exemplo3b2.txt.

O seu programa ep3b deve ser capaz de obter boas estimativas experimentais para os valores de P(p1, p2) para padrões p1 e p2 de comprimento razoável. Note que, para tanto, o seu programa deve ser o mais eficiente possível, já que suas estimativas vão ser melhores para n maiores.

Executando seu ep3b para várias entradas, você poderá classificar padrões de acordo com a sua `eficácia' neste jogo. De fato, o padrão p1 é `melhor' que o padrão p2 se

P(p1, p2) > 1/2.

Por comodidade, se este for o caso, vamos escrever p1 > p2.

ep3c

O seu programa ep3c deve receber como entrada inteiros positivos n e L. Aqui, L será o comprimento dos padrões que consideraremos. O comprimento de um padrão é, naturalmente, o número total de Hs e Ts no padrão; por exemplo, HTHH tem comprimento 4. O inteiro n é o número de vezes que você deve simular o jogo entre dois padrões para estimar a probabilidade de vitória de um deles sobre o outro.

A saída de ep3c deve ser uma lista de triplas (p1, p2, p3) de padrões de comprimento L. Estas triplas devem satisfazer a seguinte propriedade:

p1 > p2 > p3 > p1

(Veja a definição de > acima.) O seu programa ep3c deve encontrar o maior número possível de tais triplas.

Pode ser útil para o usuário de ep3c a possibilidade de pedir apenas o número de tais triplas que ele encontrou, ao invés de imprimir todas as triplas encontras. Implemente esta opção em seu ep3c.

Note que, em particular, uma hipótese subjacente a este enunciado para ep3c é que, um tanto surpreendentemente, a relação > não é transitiva (se fosse, triplas como acima não existiriam).

Observação. Para verificar sua saída, veja o arquivo saidaEP3c.txt. O programa que usei para gerar esta saída é baseado na fórmula de Conway (veja o programa fun_ver).

ep3d (opcional)

Escreva um programa ep3d que procura seqüências longas de padrões p1, p2, p3,... satisfazendo

p1 > p2 > p3 > ... > p1.

Tais seqüências de comprimento L existem, com padrões de comprimento L. Será que existem tais seqüências com muito mais do que L elementos? Note que o número de padrões de comprimento L é 2^L, que é muito maior que L (para valores grandes de L).


Observações importantes


Página de principal de MAC110 (BCC - 1o. semestre de 1999).
Netscape-HTML Checked!
Y. Kohayakawa <yoshi@ime.usp.br>

Last modified: Tue Jun 22 14:29:34 EST 1999