Ata da resolução de exercício



Documentos relacionados
Fila de Prioridade. Siang Wun Song - Universidade de São Paulo - IME/USP. MAC Estruturas de Dados

Complexidade de Algoritmos

Capítulo 13 Pastas e Arquivos

Trabalho 7 Fila de prioridade usando heap para simulação de atendimento

Pesquisa em Memória Primária. Prof. Jonas Potros

Trabalho 3: Agenda de Tarefas

Autor: Tiago Lone Nível: Básico Criação: 19/12/2005 Última versão: 18/12/2006. PdP. Pesquisa e Desenvolvimento de Produtos

DESENVOLVIMENTO DE SOFTWARE

PROGRAMAÇÃO II 3. FILA DINÂMICA

CAPÍTULO 2. Grafos e Redes

Resolução de sistemas lineares

Fundamentos de Teste de Software

Usando o Conference Manager do Microsoft Outlook

Filas. A ordem de saída corresponde diretamente à ordem de entrada dos elementos. Fila de caixa bancário

Filas: conceitos e implementações

Especificação do Trabalho

Figure 2 - Nós folhas de uma árvore binária representando caracteres ASCII

3.4 Representação física: alocação encadeada (dinâmica) Ptlista - variável ponteiro externa que indica o início da lista.

Grafo: Algoritmos e Aplicações

Manual Operacional do Assessor Jurídico

FACULDADE CAMPO LIMPO PAULISTA MESTRADO EM CIÊNCIA DA COMPUTAÇÃO. Projeto e Análise de Algoritmos II Lista de Exercícios 2

Classificação e Pesquisa de Dados

2. Execução do algoritmo de Huffman para construção de uma árvore binária (árvore de Huffman).

Algoritmos e Estrutura de Dados. Prof. Tiago A. E. Ferreira

Disciplina Técnicas de Modelagem

Banco de Dados. Microsoft Access. Índice

7 - Análise de redes Pesquisa Operacional CAPÍTULO 7 ANÁLISE DE REDES. 4 c. Figura Exemplo de um grafo linear.

9 Comandos condicionais

Procedimento passo a passo para gerar o arquivo da Nota Fiscal Paulista utilizando o aplicativo da Epson EPMFD

GUIA RÁPIDO DO e-livro. Iniciando

INF 1010 Estruturas de Dados Avançadas

Prof. Me. Marcos Echevarria

Árvores B. Hashing. Estrutura de Dados II Jairo Francisco de Souza

Listas (Parte 2) Túlio Toffolo BCC202 Aula 10 Algoritmos e Estruturas de Dados I

Busca em Memória. Secundária

Trabalho Computacional

Manual do Usuário. Protocolo

Avaliação 1 - MA Gabarito

Árvore Binária de Busca

Busca. Pesquisa sequencial

Estatística II Antonio Roque Aula 9. Testes de Hipóteses

Estruturas de Dados. Prof. Gustavo Willam Pereira Créditos: Profa. Juliana Pinheiro Campos

Implementando uma Classe e Criando Objetos a partir dela

Estruturas de Dados Aula 15: Árvores 17/05/2011

Ter o controle das pastas (Prontuários) armazenadas no "SAME", utilizando-se do recurso do "Volume".

Estruturas de Dados I

Unidade 8: Padrão MVC e DAO Prof. Daniel Caetano

MODELAGEM VISUAL DE OBJETOS COM UML DIAGRAMA DE CLASSES.

DESENVOLVIMENTO DE UM REPOSITÓRIO DE DADOS DO FUTEBOL BRASILEIRO

Resolução da lista de exercícios de casos de uso

Exercícios Teóricos Resolvidos

Universidade Federal do Vale do São Francisco. Estruturas de Dados. Professor: Marcelo Santos Linder

O Windows também é um programa de computador, mas ele faz parte de um grupo de programas especiais: os Sistemas Operacionais.

Figura 1: tela inicial do BlueControl COMO COLOCAR A SALA DE INFORMÁTICA EM FUNCIONAMENTO?

GERAÇÃO DE NOTA FISCAL PAULISTA BEMATECH RESTEQ RESOLVE TECNOLOGIA BEMATECH 1

Criar formulários preenchidos pelos usuários no Word

- UNIVERSIDADE DO VALE DO RIO DOS SINOS CIÊNCIAS EXATAS E TECNOLÓGICAS Curso: Informática / Ciência da Computação

VERSÃO VERSÃO FINANCEIRO NEFRODATA ESTOQUE FINALIZAÇÃO: 10 JUN.

Astra LX Registro de Pacientes e Médicos Guia para o acesso aos registros de Pacientes e Médicos e eliminação de dados duplicados no AstraLX

Laboratório de Programação I

Capítulo 4 Gerenciamento de Memória

Algoritmos e Estrutura de Dados III. Árvores

Manual de Instalação SIM/SINASC

Programação Estruturada. Programação Estruturada. Idéias Básicas da Programação Estruturada

Capítulo 12. SUB-ROTINAS

EAD Fila. - algumas operações realizam-se na frente/cabeça e outras na cauda da Fila

Display de 7. PdP. Autor: Tiago Lone Nível: Básico Criação: 16/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos

LGTi Tecnologia. Manual - Outlook Web App. Soluções Inteligentes. Siner Engenharia

O mecanismo de alocação da CPU para execução de processos constitui a base dos sistemas operacionais multiprogramados.

Projeto e Análise de Algoritmos

Guia de utilização da notação BPMN

Relatório Trabalho Prático 2 : Colônia de Formigas para Otimização e Agrupamento

- UNIVERSIDADE DO VALE DO RIO DOS SINOS CIÊNCIAS EXATAS E TECNOLÓGICAS Curso: Informática / Ciência da Computação

Recuperando a chave do produto. s Chaves do produto Assinando contratos Usando o VLSC

4 Estudo de caso: Problema de seqüenciamento de carros

Banco de Dados I Módulo V: Indexação em Banco de Dados. (Aulas 1, 2 e 3) Clodis Boscarioli

2 Ferramentas Utilizadas

MANUAL DE UTILIZAÇÃO DO SISTEMA HERMES

Métodos Computacionais. Fila

Prof. Bruno Holanda - Semana Oĺımpica Nível 1. Teoria dos Grafos

Serviço de Clientes. Gestix Enterprise. Gestix.com

Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos Jorge Figueiredo, DSC/UFCG. Análise e Técnicas de Algoritmos 2005.

A TEORIA DOS GRAFOS NA ANÁLISE DO FLUXOGRAMA DO CURSO DE ENGENHARIA DE PRODUÇÃO DA UFF

Facturação Guia do Utilizador

Programação Dinâmica: Algoritmo de Bellman-Ford

Representação do Conhecimento

Esse produto é um produto composto e tem subprodutos

I Semana de Software Livre da USP Dojo C

MPR MPR/SIA-805-R03 APROVAÇÃO DO PROGRAMA DE SEGURANÇA DE OPERADOR AÉREO

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA INTRODUÇÃO À LÓGICA DE PROGRAMAÇÃO PARTE I. Prof. Dr. Daniel Caetano

Lista 1 para a P2. Operações com subespaços

Sumário. 5COP096 Teoria da Computação Aula 8 Pesquisa em Memória Primária

Sistemas Operacionais. Prof. André Y. Kusumoto

MANUAL DO SISTEMA. Versão 6.07

PROJETO DE REDES

- Aulas 57, 58, 59 e 60 - Técnicas de programação. Funções

Notas de Cálculo Numérico

5.1 Modelo de uma rede óptica com conversores de comprimento de onda

Transcrição:

Ata da resolução de exercício Exercício : 6.-3 Aluno: Paulo Gurgel Pinheiro pinheiro@ic.unicamp.br Disciplina: Complexidade de Algoritmos - MO47 Data: 0 de Maio de 009 Enuciado exercício 6.-3 Vamos supor que temos um conjunto de atividades para programar entre um grande número de salas de conferências. Desejamos programar todas as atividades usando o mínimo possível de salas de conferências. Forneça um algoritmo guloso eciente para determinar que atividade deve usar casa sala de conferências. (Isso também é conhecido como o problema de colorir grafos de intervalos. Podemos criar um grafo de intervalos cujos vértices sejam as atividades dadas e cujas arestas conectem atividades incompatíveis. O menor número de cores necessárias para colorir cada vértice de tal modo que dois vértices adjacentes nunca recebam a mesma cor corresponde a encontrar o menor número de salas de conferências necessárias para programar todas as atividades dadas.). Organização Esta ata está organizada da seguinte maneira: a primeira seção descreve a solução proposta, a segunda seção um exemplo demonstrativo e a terceira seção contém o algoritmo da solução. Para entender a solução o leitor pode simplesmente escolher uma das seções desta ata. Elas foram escritas de forma que também permitissem o entendimento caso fossem lidas separadamente. Solução proposta pelo Prof. João Meidanis A descrição da solução proposta segue abaixo: Entrada do problema A entrada é um vetor S de n atividades, S = {a,..., a n }. Cada atividade possui um tempo de início i n e um tempo de m f n. Estruturas de dados utilizada Um vetor M com n posições para armazenar os marcadores tempos iniciais e nais das atividades (esse vetor pode ser visto como uma linha do tempo). M[indice] = (flag, atividade), onde flag pode ser incio ou fim. Um heap mínimo H com n elementos, {...n}. Cada nó do heap representa uma sala. No pior dos casos as n salas serão utilizadas (atividades nunca compatíveis). Um vetor A que armazenará as alocações, [indice] = (sala, atividade). Exercício extraido de []

Solução. Ordenar as atividades do vetor S por tempo de início ou assumir que já estejam ordenadas.;. Criar o vetor M com os marcadores. Exemplo: M={(inicio, ), (inicio, ), (fim, ), (inicio, 3), (fim, ), (fim, 3)} 3. Criar o heap mínimo de n nós identicados de a n; 4. Criar o vetor A de alocações.. Pecorrer o vetor M (a) Se o elemento for de início: M[indice] = (inicio, a i ) Então atividade em questão é a i ; A sala que será alocada para essa atividade será a raiz do heap H. Adiciona-se no vetor A a alocação (sala,ai). (b) Se o elemento for de m: M[indice] = (fim, a i ) Então atividade em questão é a i. A sala, quando anteriormente alocada, foi armazenada com sua atividade correspondente no vetor A. Procura-se nesse vetor essa associação, passando como entrada a atividade a i. Desaloca a sala apagando sua associação em A. Adiciona no heap mínimo H o número da sala que estava associada a essa atividade que acabará. 6. Ao nal do vetor M todas as atividades terão sido alocadas no menor número de salas possível. 3 Exemplo Para auxiliar no entendimento da solução, essa seção descreverá um exemplo prático para um conjunto de atividades. 3.0. Início Conjunto de atividades: S = {a, a, a 3, a 4, a }. Número de atividades: n =. Número de salas: (No pior caso, salas serão utilizadas). A Figura mostra as atividades dispostas em uma linha do tempo, tal que i j e f j são os tempos de início e de m de uma tarefa j, respectivamente. 3.0. Procedimento. Ordena-se o vetor S por tempo de início. S = {a, a, a 3, a 4, a }. Ou assume-se já estar ordenado, como é o caso;. Cria-se o vetor M. M= {(inicio, ), (inicio, ), (inicio, 3), (fim, ), (fim, 3), (inicio, 4), (fim, ), (inicio, ), (fim, 4), (fim, )}; Como o heap é mínimo e as salas numeradas de a n, sempre estará na raiz aquela sala de menor número.

Figura : Atividades com marcações de tempo de início e m. 3. Cria-se um Heap mínimo com nós. H = {,, 3, 4, } referente às salas. 4. Pecorre-se o vetor M 3 4.Verica primeiro elemento no vetor M. Acha (inicio, ))..Retira o nó raiz do heap. Nó retirado =. 3.Adiciona ao vetor A o elemento associaçao (atividade, sala )..Verica próximo elemento no vetor M. Acha (inicio, )..Retira o nó raiz do heap. Nó retirado =. 3.Adiciona ao vetor A o elemento associaçao(atividade, sala )..Verica próximo elemento no vetor M. Acha (inicio, 3)..Retira o nó raiz do heap. Nó retirado = 3. 3.Adiciona ao vetor A o elemento associaçao (atividade 3, sala 3)..Verica próximo elemento no vetor M. Acha (final, )..Verica no vetor de A que sala estava associada à atividade. Acha (atividade, sala ). 4.Adiciona o nó no heap mínimo..verica próximo elemento no vetor M. Acha (final, 3)..Verica no vetor de A que sala estava associada à atividade 3. Acha (atividade 3, sala 3). 4.Adiciona o nó 3 no heap mínimo..verica próximo elemento no vetor M. Acha (inicio, 4)..Retira o nó raiz do heap. Nó retirado =. 3.Adiciona ao vetor A o elemento associaçao (atividade 4, sala )..Verica próximo elemento no vetor M. Acha (final, )..Verica no vetor de A que sala estava associada à atividade. Acha (atividade, sala ). 4.Adiciona o nó no heap mínimo..verica próximo elemento no vetor M. Acha (inicio, )..Retira o nó raiz do heap. Nó retirado =. 3

3.Adiciona ao vetor A o elemento associaçao(atividade, sala)= (atividade, sala )..Verica próximo elemento no vetor M. Acha (final, 4)..Verica no vetor de A que sala estava associada à atividade 4. Acha (atividade 4, sala ). 4.Adiciona o nó no heap mínimo..verica próximo elemento no vetor M. Acha (final, )..Verica no vetor de A que sala estava associada à atividade. Acha (atividade, sala ). 4.Adiciona o nó no heap mínimo. 4 Algoritmo Nesta seção, será apresentado o algoritmo da solução. conjunto S de atividades. Tal algoritmo recebe como entrada o Algoritmo : Algoritmo para o exercício 6.-3 3 4 S ORDENA-ATIVIDADES(S); /*Ordena as atividades de S por tempo de início */ n S.tamanho; M CRIA-MARCADORES(S); /*Vetor que contém os marcadores (inicio, n) e (f im, n)*/ H BUILD-MIN-HEAP(n);/*Cria Heap min com elementos de a n*/ A A[n];/*Vetor onde vão sendo registradas as alocações (atividade, sala)*/ 6 7 8 9 0 3 4 6 7 8 9 0 for j to M.tamanho do if M[j].ag='inicio' then atividade M[j].atividade; sala REMOVE-RAIZ-HEAP(H); associacao (atividade, sala); A.adiciona(associacao); print('atividade:'+ atividade + 'na sala:'+ sala); else if M[j].ag='m' then atividade=m[j].atividade; sala BUSCA-SALA(A,atividade); A.remove(sala,atividade); ADICIONA-ELEMENTO-HEAP(H,sala) end end Na linha, as atividades de S são ordenadas por tempo de início; Na linha, n é a quantidade de atividades do vetor S; Na linha 3, é criado os marcadores da linha do tempo, tal que M[j] = (inicio fim, atividade). Exemplo: M[3] = (inicio, ), signica que a terceira marca no tempo é o início da atividade ; 4

Na linha 4, cria-se um heap mínimo com n elementos de chaves de a n. Cada nó representa uma sala; Na linha, inicializa o vetor que irá armazenar a alocação de uma atividade em uma sala. Da linha 6 a 0, o for varre o vetor M (que representa uma linha do tempo). Da linha 7 a, Se o marcador é de início: Linha 8, inicializa a variável atividade com o número da atividade do marcador. Linha 9, inicializa a variável sala com o valor da raiz do heap mínimo que foi removida (era a primeira sala que estava disponível). Linha 0, inicializa o elemento associacao com a atividade da linha 8 e a sala da linha 9. Linha, adiciona no vetor de associações A a associacao. Linha, imprime a alocação. Da linha 3 a 9, Se o marcador é de m: Linha, inicializa a variável atividade com o número da atividade do marcador. Linha 6, busca no vetor de alocações A, a sala que esta associada a atividade referida e inicializa a variável sala. Linha 7, desaloca a sala da atividade, removendo o elemento do vetor A. Linha 8, adiciona no Heap o número dessa sala que agora cou livre; 4. Procedimentos ORDENA-ATIVIDADES(S) Pode-se assumir que o vetor S de atividades já esteja ordenado crescentemente pelo tempo de início das atividades. Se não, é possível ordená-lo em tempo O(nlgn). CRIA-MARCADORES(S) Pecorre o vetor S já ordenado criando marcadores (inicio, a n ) e (fim, a n ) em ordem de acontecimento para as n atividades. BUILD-MIN-HEAP(n) Constroi um heap mínimo em O(nlgn). REMOVE-RAIZ-HEAP(H) Remove o nó raiz do heap H e executa um procedimento para reorganizar o heap. Tal procedimento é semelhante ao MAX-HEAPIFY descrito no Capítulo 6, página 06 de [], porém adaptado para um heap mínimo. Essa operação é executada no tempo O(lgn). BUSCA-SALA(A, atividade) Procedimento que retorna a sala em que a atividade estava alocada. Tal procedimento deve ser implementado utilizando um hash e ser executado em média em O(). ADICIONA-ELEMENTO-HEAP(H, elemento) Adiciona um elemento ao heap H e executa um procedimento para reorganizar o heap. Tal procedimento é semelhante ao MAX- HEAPIFY descrito no Capítulo 6, página 06 de [], porém adaptado para um heap mínimo. Essa operação é executada no tempo O(lgn). Referências [] T. Cormen, C. Leiserson, R. Rivest, and Stein C. Algoritmos: teoria e prática. Editora Campus, edition, 00.