Análise e Projeto de Algoritmos Prof. Eduardo Barrére www.ufjf.br/pgcc www.dcc.ufjf.br eduardo.barrere@ice.ufjf.br www.barrere.ufjf.br
Complexidade de Algoritmos Computabilidade: Um problema é computável se é solucionável numa Máquina de Turing Uma máquina de Turing pode ser pensada como uma fita infinita de papel, dividida em pequenas casas, e um lápis/borracha especial que pode seguir instruções. Essas instruções são bastante simples: o lápis pode ler um símbolo na fita e, analisando-o, pode apagá-lo e escrever por cima do símbolo lido e, mudando de estado, pode se mover para a direita ou para a esquerda para analisar um novo símbolo, ou simplesmente parar.
Máquina de Turing Existem máquinas de Turing determinísticas e nãodeterminísticas. As determinísticas são aquelas que quando estão em um certo estado, lendo um certo dado, podem se movimentar de um único modo rumo à próxima configuração. As não-determinísticas podem se mover para diversas configurações, a partir do dado lido e da configuração interna atual. Evidentemente as máquinas determinísticas formam uma subclasse das não-determinísticas. Alan Mathison Turing 1912-1954
Limite de Complexidade de um Problema Limite Superior: melhor algoritmo que o resolve (complexidade no pior caso) Limite Inferior: melhor complexidade possível (algumas vezes é um resultado teórico). Técnica mais simples: Contar as entradas e saídas produzidas Diferença entre os limites ou a diminuição do limite inferior são os desafios. Sem diferença: complexidade mínina.
Intratabilidade Algoritmo não eficiente -> algoritmo de complexidade não polinomial O(2 n) -> grandes valores de n -> algoritmo intratável! Algoritmos razoáveis: polinomiais Algoritmos não razoáveis: exponencial Limite inferior polinomial e Limite superior exponencial????
Problemas de Otimização vs. Problemas de Decisão A resolução de um problema de otimização consiste na seleção da melhor solução para outro problema. Arvore Geradora Mnima (Ot.): escolher a melhor solução (i.e. de menor peso) para o problema da determinação de uma arvore geradora (qualquer). A cada problema de optimização esta normalmente associado um problema de decisão, i.e., um problema cuja solução e uma resposta sim/não: Arvore Geradora Mínima (Dec.): dado um valor k, existirá alguma árvore geradora para G com peso k?
Problemas Difíceis Famosos Coloracão de um Grafo G = (V;E): e uma funcão C : V S, com S um conjunto finito de cores, verificando a restrição: (v, w) pertence a E -> C(v) C(w) (vertices adjacentes são coloridos com cores diferentes) Problema de Otimização: Dado G, determinar uma coloração C tal que o numero de cores usadas é mínimo. Problema Decisão: Dado G e k inteiro, haverá alguma coloracão de G usando no máximo k cores?
Coloração de Grafos Aplicação: problemas de escalonamento, por exemplo o problema de para determinar horários dos exames de um conjunto de disciplinas ( V ) sujeito a incompatibilidades (pares de disciplinas cujos exames não podem acontecer em simultâneo - E). Qual o número de slots de tempo necessários? Exemplo:
Coloração de Grafos Solução ótima: 3 cores Desafios: determinar soluções para instâncias deste problema sobre grafos maiores... escrever um algoritmo para resolver o problema.
Problemas Difíceis Famosos Bin Packing": Dados n objetos de dimensões s1,..., sn, com 0 < si 1, Problema Otimização: Quantas gavetas de dimensão 1 serão necessárias para arrumá-los? (E qual a disposição dos objetos correspondente?) Problema Decisão: Dado um inteiro k, será possível arrumar os n objetos em k gavetas? Aplicações: Sistemas Operacionais: dispor programas em páginas de memória; dispor dados em palavras de tamanho fixo; Investigação Operacional: problemas de corte de componentes (ex. tecido) em peças de dimensão normalizada.
Bin Packing Entrada: lista de itens L. Saída : empacotamento de L nos bins. 1. Coloque cada item grande em um bin. Indexe os bins em uma ordem arbitrária. Defina estes bins como ativos. Organize os itens pequenos como segue. 2. Se houver um bin ativo aberto, coloque o item atual a i no bin ativo aberto com o menor índice se o bin tiver espaço suficiente para a i. Caso contrário feche este bin ativo e considere o bin extra: (a) Se exite um bin extra aberto e há espaço suficiente para ai, então coloque ai nesse bin extra. (b) Caso contrário feche o bin extra, se existir. Abra um novo bin para a i e defina este bin como bin extra. 3. Se não há bin ativo aberto, crie um novo bin para a i, defina este novo bin como bin ativo.
Bin Packing Entrada: lista de itens L. Saída : empacotamento de L nos bins.
Bin Packing 1. Coloque cada item grande em um bin. Indexe os bins em uma ordem arbitrária. Defina estes bins como ativos. Organize os itens pequenos
Bin Packing 1.... 2. Se houver um bin ativo aberto, coloque o item atual a i no bin ativo aberto com o menor índice se o bin tiver espaço suficiente para a i. Caso contrário feche este bin ativo e considere o bin extra: (a) Se exite um bin extra aberto e há espaço suficiente para ai, então coloque ai nesse bin extra. (b) Caso contrário feche o bin extra, se existir. Abra um novo bin para a i e defina este bin como bin extra.
Bin Packing 1.... 2. Se houver um bin ativo aberto, coloque o item atual a i no bin ativo aberto com o menor índice se o bin tiver espaço suficiente para a i. Caso contrário feche este bin ativo e considere o bin extra: (a) Se exite um bin extra aberto e há espaço suficiente para ai, então coloque ai nesse bin extra. (b) Caso contrário feche o bin extra, se existir. Abra um novo bin para a i e defina este bin como bin extra.
Bin Packing 1.... 2. Se houver um bin ativo aberto, coloque o item atual a i no bin ativo aberto com o menor índice se o bin tiver espaço suficiente para a i. Caso contrário feche este bin ativo e considere o bin extra: (a) Se exite um bin extra aberto e há espaço suficiente para ai, então coloque ai nesse bin extra. (b) Caso contrário feche o bin extra, se existir. Abra um novo bin para a i e defina este bin como bin extra.
Bin Packing 1.... 2. Se houver um bin ativo aberto, coloque o item atual a i no bin ativo aberto com o menor índice se o bin tiver espaço suficiente para a i. Caso contrário feche este bin ativo e considere o bin extra:... 3. Se não há bin ativo aberto, crie um novo bin para a i, defina este novo bin como bin ativo.
Bin Packing 1.... 2. Se houver um bin ativo aberto, coloque o item atual a i no bin ativo aberto com o menor índice se o bin tiver espaço suficiente para a i. Caso contrário feche este bin ativo e considere o bin extra: (a) Se exite um bin extra aberto e há espaço suficiente para ai, então coloque ai nesse bin extra. (b) Caso contrário feche o bin extra, se existir. Abra um novo bin para a i e defina este bin como bin extra.
Bin Packing 1.... 2. Se houver um bin ativo aberto, coloque o item atual a i no bin ativo aberto com o menor índice se o bin tiver espaço suficiente para a i. Caso contrário feche este bin ativo e considere o bin extra: (a) Se exite um bin extra aberto e há espaço suficiente para ai, então coloque ai nesse bin extra. (b) Caso contrário feche o bin extra, se existir. Abra um novo bin para a i e defina este bin como bin extra.
Bin Packing 1.... 2. Se houver um bin ativo aberto, coloque o item atual a i no bin ativo aberto com o menor índice se o bin tiver espaço suficiente para a i. Caso contrário feche este bin ativo e considere o bin extra:... 3. Se não há bin ativo aberto, crie um novo bin para a i, defina este novo bin como bin ativo.
Problemas Difíceis Famosos Mochila": Dada uma mochila de capacidade C e n objetos de dimensões s1,...,sn e valores p1,..., pn, Problema Otimização: Determinar o valor máximo dos objetos que se consegue colocar na mochila (e a lista desses objetos). Problema Decisão: Dado um inteiro k, existira um conjunto de objetos que caiba na mochila e corresponda a um valor k? Aplicações: Planejamento econômico; investimentos (tamanhos correspondem a capital investido, valor corresponde a lucro esperado).
Mochila - Enunciado Um viajante deve levar consigo, apenas uma mochila. Essa mochila possui uma capacidade limitada e deve ser carregada apenas com objetos que serão úteis durante a viagem. Cada objeto é único e possui um peso e um determinado valor. Que objetos dever ser levados pelo viajante de forma a maximizar o valor da mochila? Um contêiner com capacidade limitada deve ser carregado com diversos produtos de pesos e tamanhos diferentes. Como deve-se proceder para carregar o máximo possível de produtos, desperdiçando o mínimo possível de espaço. Um computador está sobrecarregado de arquivos e os mesmos devem ser transferidos para mídias em CD, e sabe-se que será necessário mais de um CD. Como deve-se proceder para carregar o máximo possível de arquivos em cada CD, desperdiçando o mínimo possível de espaço em cada mídia.
Mochila
Problemas Difíceis Famosos Caminhos e Circuitos de Hamilton: Num grafo G, um caminho de Hamilton é um caminho que passa por cada vértice exatamente uma vez. Um circuito de Hamilton é qualquer ciclo que seja um caminho de Hamilton. Problema Decisão: Decidir se G contem ou não um caminho de Hamilton (ou um circuito).
Problemas Difíceis Famosos Caixeiro Viajante: Dado um grafo G, com seus respectivos pesos, Problema Otimização: Determinar o circuito de Hamilton de peso mínimo. Problema Decisão: Para um inteiro k, haverá algum circuito de Hamilton em G, com peso k? Aplicações: O caixeiro viajante pretende minimizar a distância total percorrida para passar por todas as cidades que deve visitar. Mas também: circuito ótimo para recolha de lixo ou entrega de correio numa cidade...
Caixeiro Viajante Problema (n-1)! Combinações possíveis: 1) 1 2 3 4 1 2) 1 2 4 3 1 3) 1 3 2 4 1 4) 1 3 4 2 1 5) 1 4 2 3 1 6) 1 4 3 2 1