Baixe o app para aproveitar ainda mais
Prévia do material em texto
ANÁLISE DE ALGORITMOS Bacharelado em Ciência da Computação Trabalho Prático 03 Investigando Técnicas de Análise de Algoritmos Eficientes Objetivo: Exercitar o projeto de algoritmos à luz da aplicabilidade de técnicas de projeto, tais como Backtracking, Programação Dinâmica e Método Guloso Modalidade de desenvolvimento: equipe (até 2 componentes) Modalidade da apresentação: envio no formato .odt1 para flaviacoelho@ufersa.edu.br Data de entrega: Domingo, 20/11/2016 Artefatos de entrega: soluções das questões, a seguir. Atenção: Nas justificativas, apresente todos os cálculos matemáticos relacionados. 1. (1,5 pt) [Backtracking] Em 1850, Thomas Kirkman apresentou o ‘problema das 15 alunas’, no qual 15 alunas caminham para a escola em 5 linhas de 3 em cada dia da semana. O objetivo é organizar uma escala diária tal que cada par não caminhe junto mais do que uma vez. Considere que as alunas são Ana, Beatriz, Carla, Diana, Eva, Francisca, Geane, Helga, Iana, Jeane, Katia, Luiza, Maria, Najla e Olívia. Eis uma solução, a seguir. Seg Ter Qua Qui Sex Sáb Dom ABC ADG AEJ AFO AHK AIM ALN DEF BEH BFL BDM BGN BKO BIJ GHI CJM CHO CGL CFI CEN CDK JKL FKN DIN EIK DJO DHL EGO Para solucionar o problema, pode-se verificar todas as possibilidades, ou seja, as 15! formas das alunas serem organizadas por dia e (15!)7 formas semanalmente. Sendo assim, elabore um algoritmo baseado em Backtracking para solucionar o problema e a árvore de busca exaustiva inteligente derivada. Determine também a complexidade assintótica (pior caso) do algoritmo elaborado. 2. (1,5 pts) [Programação Dinâmica] Considere que há vários eventos que almejam utilizar o espaço do Centro de Convenções da UFERSA durante o intervalo de tempo que começa 1 De acordo com o modelo disponível via SIGAA. 1 ANÁLISE DE ALGORITMOS Bacharelado em Ciência da Computação numa data a e termina numa data b. Dois eventos são considerados compatíveis se os seus intervalos de tempo são disjuntos. Cada evento possui um determinado valor e a administração do Centro de Convenções precisa selecionar um conjunto de eventos mutuamente compatíveis que tenha o maior valor total possível. Sejam a1, a2, ..., an e b1, b2, ..., bn números naturais tais que ai ≤ bi para cada i. Cada índice i representa o intervalo que tem origem ai e término bi, ou seja, o conjunto {ai, ai+1, …, bi–1, bi}. Dois intervalos distintos i e j são compatíveis se bi < aj ou bj < ai. Um conjunto de intervalos é viável se seus elementos são compatíveis dois a dois. A cada intervalo i está associado um número natural vi que representa o valor do intervalo. O valor de um conjunto S de intervalos é o número v(S) = ∑ i∈S v i . Um conjunto viável S tem valor máximo se v(S) ≥ v(S’) para todo conjunto S’ de intervalos que seja viável. Assim, pode-se definir formalmente o problema. Problema dos Intervalos Compatíveis de Valor Máximo: Dados números naturais a1, ..., an, b1, ..., bn e v1, ..., vn tais que ai ≤ bi para cada i, encontrar um subconjunto viável de {1, …, n} que tenha valor máximo. Observa-se que o problema possui estrutura recursiva, afinal, qualquer solução de uma instância do problema contém soluções de instâncias menores. E mais, para simplificar a descrição do conjunto de intervalos compatíveis com n, convém supor que os intervalos estão em ordem crescente de términos, ou seja, que b1 ≤ b2 ≤ ··· ≤ bn. Sob esta hipótese, o conjunto dos intervalos compatíveis com n é simplesmente {1, …, j}, sendo j o maior índice tal que bj < an. Supondo X(n) o valor de um “subconjunto viável de valor máximo” de {1, …, n}, a estrutura recursiva do problema garante que X(n) = max(X(n − 1), X(j) + vn} (i) sendo j o maior índice tal que bj < an. Se tal j não existe então (i) se reduz a X(n) = max(X(n − 1), vn}. Essa recorrência pode ser facilmente transformada em um algoritmo recursivo. Porém, o algoritmo é muito ineficiente, pois resolve cada subinstância repetidas vezes. Sendo assim, elabore um algoritmo baseado em programação dinâmica que receba n intervalos, de modo que b1 ≤ b2 ≤ ··· ≤ bn., e retorna o valor de um subconjunto viável de valor máximo de {1, …, n}. Determine também a complexidade computacional assintótica do algoritmo proposto. 2 ANÁLISE DE ALGORITMOS Bacharelado em Ciência da Computação 3. (1 pt) [Método Guloso] Fórmulas Horn são um esquema utilizado, em Computação (especialmente, são a base da linguagem PROLOG), para expressar fatos lógicos e derivar conclusões. O objeto mais primitivo em uma fórmula Horn é uma variável booleana, tomando valores verdadeiro ou falso. Por exemplo, as varáveis x, y e z poderiam denotar possibilidades, tais como x ≡ o assassinato aconteceu na cozinha y ≡ o mordomo é inocente z ≡ o coronel estava dormindo às 8 da noite Um literal é uma variável x ou a sua negação ~x (não x). Em fórmulas Horn, o conhecimento sobre as variáveis é representado por dois tipos de cláusulas: i) Implicações, cujo lado esquerdo é um AND de qualquer número de literais positivos e cujo lado direito é um único literal positivo. Isso expressa sentenças da forma “se as condições à esquerda valem, então as da direita também têm de ser verdadeiras”. Por exemplo, (z AND w) → u pode representar “se o coronel estava dormindo às 8h da noite e o assassinato aconteceu às 08h da noite, então o coronel é inocente”. ii) Cláusulas puramente negativas, consistindo em um XOR de qualquer número de literais negativos, como em (~u XOR ~v XOR ~y) - “eles não podem ser todos inocentes”. Dado um conjunto de cláusulas desses 2 tipos, o objetivo é determinar se existe uma explicação coerente: uma atribuição de verdadeiro/falso às variáveis que satisfaça todas as cláusulas. Sendo assim, elabore um algoritmo baseado no método guloso para o problema. Determine também a sua complexidade computacional assintótica (pior caso). 3 Trabalho Prático 03
Compartilhar