• Nenhum resultado encontrado

Contando o n´ umero de presentes em um evento

No documento Algoritmos e Estruturas de Dados I (páginas 9-12)

No primeiro dia letivo do primeiro semestre de 2009, um dos autores deste material colocou o seguinte problema aos novos alunos: quer´ıamos saber quantos estudantes estavam presentes na sala de aula naquele momento. A sala tinha capacidade aproxi-mada de 100 lugares e a naquele momento estava razoavelmente cheia.

Os estudantes discutiram v´arias possibilidades. Apresentamos todas elas a seguir.

Primeira solu¸ c˜ ao

A primeira solu¸c˜ao parecia t˜ao ´obvia que levou algum tempo at´e algum aluno verbali-zar: o professor conta os alunos um por um, tomando o cuidado de n˜ao contar algu´em duas vezes e tamb´em de n˜ao esquecer de contar algu´em.

Quais s˜ao as vantagens deste m´etodo? Trata-se de uma solu¸c˜ao simples, f´acil de executar e produz o resultado correto. ´E uma solu¸c˜ao perfeita para salas de aula com

9

poucos alunos, digamos, 20 ou 30. Outro aspecto considerado foi o fato de que este m´etodo n˜ao exige nenhum conhecimento pr´evio de quem vai executar a opera¸c˜ao, a n˜ao ser saber contar. Tamb´em n˜ao exige nenhum equipamento adicional.

Quais as desvantagens? Se o n´umero de alunos na sala for grande, o tempo ne-cess´ario para o t´ermino da opera¸c˜ao pode ser insatisfat´orio. Para piorar, quanto maior o n´umero, maior a chance de aparecerem erros na contagem. Foi discutida a adequa¸c˜ao desta solu¸c˜ao para se contar os presentes em um com´ıcio ou manifesta¸c˜ao popular numa pra¸ca p´ublica. Concluiu-se pela inviabilidade do m´etodo nestes casos.

Executamos a contagem em aproximadamente 1 minuto. Dois alunos tamb´em fizeram a contagem e, ap´os conferˆencia, obtivemos o resultado correto, que serviu para an´alise das outras solu¸c˜oes.

Segunda solu¸ c˜ ao

Pensando no problema de se contar na ordem de 100 alunos, um estudante sugeriu que se fizesse apenas a contagem das carteiras vazias e em seguida uma subtra¸c˜ao com rela¸c˜ao ao n´umero total de carteiras na sala.

A solu¸c˜ao tamb´em ´e muito simples e funciona perfeitamente bem, mas exige um conhecimento pr´evio: deve-se saber antecipadamente o total de carteiras na sala.

Esta maneira de contar ´e cada vez melhor quanto maior for o n´umero de presentes, pois o n´umero de carteiras vazias ´e menor do que o das ocupadas. Por outro lado, se a sala estiver com pouca gente, o m´etodo anterior ´e mais eficiente.

Os alunos observaram tamb´em que a solu¸c˜ao n˜ao se aplica para os casos de con-tagem de presentes a um com´ıcio numa pra¸ca p´ublica, pois n˜ao h´a carteiras na rua.

Terceira solu¸ c˜ ao

Para resolver o problema do com´ıcio, outro estudante sugeriu que se fizesse uma estimativa baseada na metragem total da pra¸ca, multiplicada pelo n´umero estimado de pessoas por metro quadrado.

Solu¸c˜ao elegante, na pr´atica ´e o que a organiza¸c˜ao do com´ıcio e a pol´ıcia usam.

Mas deve-se saber de antem˜ao a metragem da pra¸ca e estimar a taxa de pessoas por metro quadrado. O m´etodo ´e t˜ao bom quanto melhor for a estimativa. Tamb´em ´e melhor se a popula¸c˜ao estiver uniformemente distribu´ıda.

Concluiu-se que ´e um bom m´etodo, mas que n˜ao ´e preciso. Isto ´e, a chance do n´umero estimado ser exatamente o n´umero de presentes ´e baixa. Os m´etodos anteriores s˜ao exatos, isto ´e, nos d˜ao o n´umero correto de presentes. Este m´etodo tamb´em serve razoavelmente bem para o n´umero de alunos na sala de aula. De fato, nesta aula, o professor conseguiu o n´umero com aproxima¸c˜ao 80% correta. A quest˜ao que restou ´e se o erro de 20% ´e aceit´avel ou n˜ao. Isto depende do motivo pelo qual se quer contar os alunos na sala.

Quarta solu¸ c˜ ao

Para resolver o problema da precis˜ao, outro estudante sugeriu o uso de roletas.

2.1. CONTANDO O N ´UMERO DE PRESENTES EM UM EVENTO 11 Efetivamente ´e esta a solu¸c˜ao para contar torcedores no est´adio ou presentes em um show de rock. Mas tamb´em foi considerado que a solu¸c˜ao exige uma ou mais catracas, uma barreira para ningu´em entrar sem passar pela roleta e etc, para se garantir a exatid˜ao do resultado. No caso do com´ıcio n˜ao seria vi´avel. No caso da sala de aula foi constatado que n˜ao havia roletas e portanto o m´etodo n˜ao se aplicava.

Quinta solu¸ c˜ ao

Mais uma vez outro estudante apresentou uma boa alternativa: contar o n´umero de filas de carteiras e, dado que todas tenham o mesmo n´umero de estudantes, ent˜ao bastaria uma simples multiplica¸c˜ao para a determina¸c˜ao do n´umero correto.

De fato esta solu¸c˜ao funciona perfeitamente bem em lugares como por exemplo o ex´ercito. As filas s˜ao rapidamente arrumadas com, digamos, 10 soldados em cada fila, sabendo-se o n´umero de filas basta multiplicar por 10, eventualmente tendo-se que contar o n´umero de pessoas em uma fila que n˜ao tenha completado 10.

Infelizmente as carteiras estavam bagun¸cadas na nossa sala e este c´alculo n˜ao pode ser feito. Tamb´em ficaria estranho o professor colocar todos os alunos em filas. Foi tamb´em observado que o m´etodo fornece a solu¸c˜ao exata para o problema.

Sexta solu¸ c˜ ao

Nova sugest˜ao de outro aluno: cada estudante no in´ıcio de cada fila conta o n´umero de alunos da sua fila, tomando o cuidado de contar a si pr´oprio tamb´em. Depois soma-se todas as contagens de todos os primeiros de fila.

Solu¸c˜ao muito boa. Na verdade ´e a vers˜ao em paralelo da primeira solu¸c˜ao.

Distribuindo-se a tarefa, cada primeiro de fila tem entre 10 e 15 alunos para con-tar em sua fila. Se a soma foi correta o n´umero obtido ao final do processo ´e exato.

No caso daquela aula os estudantes realizaram a opera¸c˜ao em poucos segundos, mais algum tempo para as somas (isto demorou mais. . . ). Mas o resultado foi exato.

A solu¸c˜ao n˜ao exige conhecimento pr´evio, n˜ao exige equipamento adicional e ´e razoavelmente escal´avel, isto ´e, funciona para salas de tamanhos diferentes.

S´ etima solu¸ c˜ ao

Para finalizar, o professor apresentou a solu¸c˜ao seguinte: todos os estudantes se le-vantam e se atribuem o n´umero 1. Em seguida os alunos se organizam em pares. Em cada par, primeiro ´e somado o n´umero de cada um dos dois, um deles guarda este n´umero e permanece de p´e, o outro deve se sentar. Os que ficaram em p´e repetem este processo at´e que s´o exista um ´unico aluno em p´e. Ele tem o n´umero exato de estudantes na sala.

Como se divide a sala em pares, ap´os a primeira rodada metade da sala deve ter o n´umero 2 e a outra metade est´a sentada, considerando que a sala tem o n´umero de alunos par. Se for ´ımpar um deles ter´a ainda o n´umero 1. Ap´os a segunda rodada um quarto dos alunos dever´a ter o n´umero 4 e trˆes quartos estar˜ao sentados, eventualmente um deles ter´a um n´umero ´ımpar. E f´´ acil perceber que o resultado sai em tempo

proporcional ao logaritmo do n´umero total de alunos, o que ´e bem r´apido. De fato, para mil pessoas o processo termina em 10 passos e para um milh˜ao de pessoas termina em 20 passos.

Parece um bom algoritmo, ele d´a resultado exato, n˜ao exige conhecimento pr´evio,

´e escal´avel, isto ´e, funciona muito bem para um grande n´umero de pessoas, mas exige organiza¸c˜ao dos presentes.

Infelizmente aquela turma n˜ao se organizou direito e o resultado veio com um erro de 40%. . . Mas ap´os duas rodadas de treinamento, na terceira conseguimos obter o resultado correto.

No documento Algoritmos e Estruturas de Dados I (páginas 9-12)