Técnicas de Desenho de Algoritmos Mudança de ênfase: da implementação de algoritmos para o desenho de algoritmos A ver: 5 tipos de algoritmos abordagem ao problema exemplos complexidade em tempo e espaço Referências: Mark Allen Weiss. Data Structures & Algorithm Analysis in Java. Addison- Wesley, 1999. Robert Sedgewick. Algorithms in C++. Addison-Wesley, 1992. Steven S. Skiena. The Algorithm Design Manual. Springer 1998.
Algoritmos Gananciosos Exemplos Anteriores: Dijkstra, Prim, Kruskal Cada fase do algoritmo: decisão baseada no ganho imediato consequências futuras não consideradas Algoritmo atinge óptimos locais se é óptimo global, é solução se não, pode servir para obter aproximação Exemplo de problema que resolve bem: fazer trocos, minimizando número de notas e moedas estratégia: dar repetidamente a maior unidade possível Exemplo de problema que não resolve bem: caminho mais rápido usando estratégia da melhor aresta adjacente
Problema de escalonamento Dados: tarefas e tempos Objectivo: minimizar tempo médio de terminação Tempo médio: 25 Tarefa Tempo j1 j2 j3 j4 j 1 15 j 2 8 j 3 3 Tempo médio: 17.75 15 23 26 36 j 4 10 j3 j2 j4 j1 3 11 21 36
Escalonamento 2ª solução é óptima Porquê: tarefas mais curtas primeiro Tarefas: j i1, j i2,..., j in Terminações: ti1, ti1+ti2,... Custo total da solução: n n n (n - k +1) t = ik (n+1) t ik k t ik k = 1 k =1 k = 1 Se existe x>y tal que t ix < t iy : troca de j ix e j iy diminui custo
Escalonamento multiprocessador Exemplo com 3 processadores Tarefa Tempo j1 j2 j3 j4 j5 j6 j7 j8 j9 3 5 6 10 11 14 15 18 20 Total de tempos: 165 Tempo médio: 18.33 j1 j2 j3 j4 j5 j6 j7 3 5 6 13 16 20 28 34 40 j8 j9
Solução óptima não é única Para cada i, o i < n/p as tarefas j ip+1 a j (i+1)p são alocadas a processadores diferentes j1 j5 j9 j2 j4 j7 j3 j6 j8 3 5 6 14 15 20 30 34 38
Minimizar tempo de completação Tempo a minimizar é o da última tarefa a terminar j2 j5 j8 j6 j9 j1 j3 j4 j7 3 5 9 14 16 19 34 Este problema é variante do empacotamento, logo NP-completo!
Empacotamento Dados: n items, tamanhos s1, s2,..., sn (0 < si 1) Pretende-se: arrumá-los em caixas de capacidade 1, minimizando o nº de caixas Exemplo: items com tamanhos 0.2,, 0.4, 0.7, 0.1, 0.3, 0.8 0.8 0.2 0.3 0.7 0.1 0.4 C1 C2 C3 Esta é solução óptima: encontrá-la é problema NP-completo
Empacotamento on-line Será que pode encontrar a solução óptima? Sequência de entrada I1: m items de tamanho 1/2 - δ m items de tamanho 1/2 + δ 0 < δ < 0.01 Podem ser colocados em m caixas (solução óptima) Supondo Algoritmo óptimo A, encontra esta solução Que faz A se a sequência de entrada fôr I2: m items de tamanho 1/2 - δ I2 pode ser colocada em [m/2] caixas; mas A deve colocá-lo em m caixas, para dar a solução óptima a I1 Então A não obtém a solução óptima para I2
Limites para o empacotamento on-line Teorema: Há sequências de entrada que forçam um algoritmo de empacotamento on-line a usar pelo menos 4/3 do número óptimo de caixas Prova: m é par, Algoritmo A corre sobre I1 Depois de processar o m-ésimo item, A usou C caixas O nº óptimo neste ponto é m/2, então 2C/m < 4/3, ou seja C/m < 2/3 Depois de processar todos os items, todas as caixas após a número C contêm apenas 1 item; as C caixas iniciais: máximo 2 items restantes: máximo 1 item 2m items requerem mínimo de 2m-C caixas, o óptimo usa m Então deverá ser 2m-C)/m < 4/3, ou seja C/m > 2/3
Cada item é colocado: Estratégia next fit Na mesma caixa do anterior, se couber Se não, em nova caixa Simples, e tempo linear No exemplo: 0.1 0.7 0.8 0.2 0.4 0.3
Teorema: Limites Seja m o número óptimo de caixas para uma lista I de items. A estratégia next fit nunca usa mais que 2m caixas. Há sequências que requerem 2m-2 caixas. Prova: Para duas caixas adjacentes Cj e Cj+1: a soma dos tamanhos dos items é maior que 1, senão eles teriam sido colocados em apenas 1 caixa; então no máximo metade do espaço é desperdiçado. Limite é apertado: n items, tamanho para os de ordem ímpar e 2/n para os de ordem par n divisível por 4 Empacotamento óptimo: n/4 caixas com 2 elementos de cada, 1 caixa para restantes Total n/4 +1 caixas
Solução next fit Exemplo desfavorável 2/n 2/n... 2/n C1 C2 Cn/2 Solução óptima 2/n 2/n 2/n...... 2/n C1 C2 Cn/4 Cn/4+1
Cada item é colocado: Estratégia first fit Na primeira caixa com espaço para ele, procurando por ordem, se existir Se não, em nova caixa Com pesquisa eficiente, pode correr em O(n log n) No exemplo: 0.1 0.2 0.3 0.7 0.8 0.4
Eficiência de first fit Em cada momento: no máximo 1 caixa está mais de 1/2 vazia; solução tem no máximo o dobro do óptimo Teorema: Seja m o número óptimo de caixas para uma lista I de items. A estratégia first fit nunca usa mais que 17/10 m caixas. Há sequências que obrigam a usar 17/10 (m-1) Exemplo: sequência é 6m items de tamanho 1/7 + δ 6m items de tamanho 1/3 + δ 6m items de tamanho 1/2 + δ Óptimo usa 6m caixas mas first fit precisa de 10m caixas.
Exemplo desfavorável 1/7 + δ 1/7 + δ 1/7 + δ 1/7 + δ 1/7 + δ 1/7 + δ 1/3 + δ 1/3 + δ 1/2 + δ C1 a Cm Cm+1 a C4m C4m+1 a C10m Resultados médios: com número grande de items com tamanhos uniformemente distribuídos entre 0 e 1 usa número de caixas superior em 2% ao óptimo
Cada item é colocado: Estratégia best fit No lugar livre com tamanho mais próximo do seu, se existir Se não, em nova caixa Nunca pior que 1.7 vezes o óptimo, mas próximo disto nos piores casos No exemplo: 0.1 0.3 0.2 0.4 0.7 0.8
Algoritmos off line Podem encontrar óptimo: no limite por busca exaustiva Problema nos on line : os items grandes Como fazer: ordenar os items e depois aplicar first fit ou best fit resulta first fit decreasing ou best fit decreasing Eficiência: sendo empacotamento óptimo com m caixas: first fit decreasing e best fit decreasing não usam mais de 11/9 m +4 podem ter de usar 11/9 m