Instituto de Computação da UNICAMP
Disciplina MC202: Estruturas de Dados

2° Semestre de 2005

Prof. Ricardo da Silva Torres e Prof. Sandro Rigo

Laboratório Nº 01


Descrição:

Uma agência bancária está realizando um estudo para determinar qual a melhor configuração para as filas de clientes de seus caixas de atendimento. Para tal, a gerência decidiu tomar como base para o estudo três diferentes serviços: pagamentos de contas, abertura de contas e depósitos. Cada um dos serviços tem um código de identificação e um tempo de atendimento bem determinados, como mostra a tabela abaixo:


Código Serviço Tempo de Atendimento (min)
101 Pagamentos de contas 7
111 Abertura de contas 13
121 Depósitos 3

Você foi incumbido de desenvolver o programa para simular o comportamento de três diferentes configurações para as filas de clientes. Baseada nos resultados fornecidos por seu programa, a gerência da agência decidirá como será a reestruturação das filas de atendimento. Considere que a agência tem 4 caixas disponíveis. As três configurações de filas que seu programa deve simular são:

  1. Existe uma fila única. Todo cliente que chegar na agência deve entrar no final desta fila, não importando qual serviço ele pretende realizar.

  2. Uma fila para cada tipo de serviço. Ao chegar na agência, o cliente deve entrar no final da fila correspondente ao serviço que deseja realizar, neste caso a agência estará operando com apenas 3 caixas (um para cada fila).

  3. Uma fila para cada caixa. O critério de escolha da fila deve obedecer às seguintes condições. Sejam f1, f2, f3, f4 uma ordenação das filas, cada uma associada à um caixa:

    1. O cliente deve entrar no final da fila do caixa que contiver menos clientes naquele momento.

    2. Se duas ou mais filas possuírem o mesmo tamanho, o cliente deverá optar pela fila fi de menor índice i.

    3. Entre uma vazia, na qual o caixa está ocioso e uma fila vazia, na qual o caixa está atentendo outro cliente, o cliente deverá escolher a fila do caixa que está ocioso.

    4. O cliente não deverá levar em consideração os serviços que tanto ele como os outros clientes estiverem realizando na fila.


Entrada:

A entrada para seu programa consiste em várias linhas, a primeira representa o número k de configurações testadas, a segunda consiste de k números (1, 2 ou 3) indicando quais configurações deverão ser simuladas para este arquivo de entrada. A terceira linha indica o número o número n de clientes que serão atendidos nesta simulação, e cada uma das n linhas subsequentes representa a chegada de um novo cliente à agência. A partir da quarta linha, o primeiro número indica o tempo de simulação no qual o cliente chegou (em minutos), e o segundo indica o código do serviço que o cliente vai realizar. Assuma que um cliente nunca vai realizar mais de um serviço e que ele entra em uma fila imediatamente ao chegar na agência e que as entradas estão em ordem cronológica. A escolha da fila deve ser feita através das três políticas descritas acima.

Exemplo:

3 
2 1 3
8
0 121
3 111
3 101
4 111
4 121
5 101
5 101
6 101

Saída:

A saída de seu programa deve consistir de k linhas, cada uma contendo um número real, representando o tempo médio de espera para cada cliente em cada configuração descrita acima, na ordem indicada. Isto é, a média de duração de todos os períodos que cada cliente teve que esperar em uma fila até o início de seu atendimento por um dos caixas da agência. Este tempo deve estar medido em minutos.

Exemplo:

5.88
1.88
3.38

Instruções de Implementação: