Resumo - Técnicas Avançadas em Construção de Software

download Resumo - Técnicas Avançadas em Construção de Software

of 6

Transcript of Resumo - Técnicas Avançadas em Construção de Software

  • 8/16/2019 Resumo - Técnicas Avançadas em Construção de Software

    1/6

    PROVA 

    1.  BackTracking 

    - Recursividade - Busca Exaustiva (Combinatório) - Caixeiro Viajante, N-Rainhas, Passeio do Cavalo - Fácil de implementar  - Usado para encontrar todas as soluções possíveis para oproblema - Percorre a árvore por DFS (depth-first search - busca emprofundidade) 

    - Descobre uma má escolha e a desfaz voltando - Percorre toda a arvore de espaço de estados até achar umasolução - Trata-se de uma função de viabilidade 

    2.  Algoritmos Gulosos 

    - Fácil Implementação 

    - Nem sempre produz melhor solução (+informação = > chancede solução ótima) - Escolhe o melhor caminho no momento - Problema do Troco - Não volta atrás - Podem entrar em loop infinito - Utilizam de uma estratégia contrária a programação dinâmica. 

    3.  Algoritmos Sobre Grafos 

    - Algoritmo de Busca (profundidade DFS e largura BFS) * Examina cada arco no máx. uma vez. 

    - DFS * backtracking, pré-ordem, labirintos. 

  • 8/16/2019 Resumo - Técnicas Avançadas em Construção de Software

    2/6

      * utiliza pilha - BFS 

    * utiliza fila de vértices (s, então vizinhos com distância 1 de

    s, então vizinhos a 2 de s) 

    - Algoritmos de Caminhos Mínimos (Dijkstra) * Considerado algoritmo guloso * Não garante solução ótima caso grafo possua arestas de

    peso negativo * GPS (menor caminho) 

    - Algoritmos de Árvores Mínimas (Prim, Kruskal) 

    - Prim * Algoritmo guloso. * Subárvore de custo mínimo. * Conceito de Franja. 

    - Kruskal (diferença PRIM-KRUSKAL?) * Algoritmo guloso. * Árvore geradora mínima (soma das arestas conectando

    todos os vértices é mínimo). * Menor custo para rotas de avião. 

    4. Programação Dinâmica 

    - Método para construção de algoritmos que resolvam problemascomputacionais. - Otimização combinatória. - Recursão “com apoio de tabela”. - A função da tabela é salvar a solução dos subproblemas deforma que estes não precisem ser recalculados. - Reduz o problema em subproblemas e resolve essessubproblemas em busca da solução ótima. - Consumo de tempo proporcional a tabela. 

  • 8/16/2019 Resumo - Técnicas Avançadas em Construção de Software

    3/6

    - A tabela é a base de um algoritmo de PD. - Alguns problemas da otimização: 

    * Muitas soluções possíveis. 

    * Cada solução tem um valor. 

    - Etapas de um algoritmo de PD: * Caracterizar solução ótima. * Definir recursivamente o valor da solução ótima. * Calcular o valor dessa solução de forma bottom-up

    (subproblemas menores para maiores até a raiz). * Construir solução a partir dos cálculos realizados. 

    - Exemplos: Fibonacci e Calcular Troco. 

    5. Branch and Bound 

    - Utilizado em problemas de otimização combinatória- Branch = partições realizadas no espaço de soluções- Bound = Limitações nas partições- Divide o problema em sub-problemas da mesma forma que

    a Programação Dinâmica, de forma que a solução pode ser

    obtida através da resolução dos problemas menores.- Problemas que não contenham a solução ótima são

    descartados- O problema é visto como uma árvore; o nó raiz é o problema

    original e as folhas são soluções viáveis.- Permite percorrer a árvore de qualquer maneira (DFS - BFS)- Limites são utilizados para descartar nós da árvore onde há

    certeza de que não originarão soluções melhores do que as já existentes.- Permitem “medir a distância” até a solução ótima. 

    obs: (não entendi o conceito de limites inferior e superior ainda)

  • 8/16/2019 Resumo - Técnicas Avançadas em Construção de Software

    4/6

    6. Casamento de Padrões 

    - Ato de verificar padrões em um conjunto de dados (buscarstring em um texto ou um conjunto de números em um

    conjunto maior)- Busca um padrão P de tamanho m em um arranjo T detamanho n onde m

  • 8/16/2019 Resumo - Técnicas Avançadas em Construção de Software

    5/6

    - Método Robin-Karp ●  Trata cada substring de tamanho M do texto como

    chave em uma tabela.

    - Casamentos não exatos são situções onde o algoritmoaproxima o input do caso mais utilizado, como exemplo oGoogle aproxima o resultado de um input com errogramatical.

    7. P, NP e NP-Completo 

    - Conceito de tempo polinomial: Um algoritmo é polinomial seo seu consumo de tempo é limitado por uma funçãopolinomial proporcional ao tamanho da instância doproblema.

    - Um algoritmo determinístico pode ser representado por umamáquina de estados, onde após o estado inicial, o estadoatual determinará o próximo estado (abstrato pra caralho). Uma máquina determinística pode nunca retornar um

    resultado.- Já o conceito de não-determinístico se difere quando

    quando o algoritmo considera valores externos aos deentrada previamente definidos, como variáveis globais ouentradas de usuário.

    - Também é considerado como não-determinístico quando setem soluções distintas segundo uma mesma entrada.

    - Basicamente entende-se por NP, os problemas cuja soluçãopode ser verificada em tempo polinomial, mas podem nãoser resolvidos em tempo polinomial.

    - Exemplos: Caixeiro Viajante, Quadrado Perfeito.

  • 8/16/2019 Resumo - Técnicas Avançadas em Construção de Software

    6/6

    - Problemas P podem ser resolvidos em tempo polinomial. Aqui está contida a maior parte dos algoritmos.

    - Exemplos: BubbleSort O(n²).

    - Redução de Problemas NP●  Um problema Y não é mais dificil de resolver que um

    problema X se um algoritmo que resolve X pode serusado para resolver Y.

    ●  As etapas dessa redução são:

    ○  Transformar uma instancia de Yem uma instancia de X, resolver X com umalgoritmo para X obtendo uma solução S e por fimtransformar S em uma solução da instancia de Y.

    - Um problema C é considerado NP-Completo se 1. ele estacontido em NP e 2. todo problema np-completo é redutível

    para C em tempo polinomial.- P vs NP: Problema conhecido na Ciencia da Computação.

    “Todo problema cuja solução pode ser verificada em tempopolinomial (classe NP), pode ser resolvido em tempopolinomial (classe P)?”