DAINF - Departamento de Informática Algoritmos 2 - Introdução Prof. Alex Kutzke (http://alex.kutzke.com.br/courses) 19 de Agosto de 2015 Slides adaptados do material produzido pelo Prof. Rodrigo Minetto (http://www.dainf.ct.utfpr.edu.br/~rminetto/)
Plano de ensino Objetivos Capacitar o aluno a analisar problemas e a determinar quais estruturas de dados e algoritmos são adequados para uma ou mais soluções. Ementa Introduzir o Conceito de Tipos Abstratos de Dados e suas utilizações práticas. Introduzir os algoritmos clássicos de classificação e pesquisa para as estruturas de dados estudadas. Capacitar o aluno a analisar problemas e a determinar quais estruturas de dados e algoritmos são adequados para uma ou mais soluções
Conteúdo programático Plano de ensino Introdução às Estruturas de Dados Noção geral de Listas, Pilhas e Filas. Manipulação de Estruturas de Dados Inserção e Remoção em listas; Inserção e Remoção em filas; Inserção e Remoção em pilhas. Métodos de ordenação e busca Ordenação, pelo método bolha, sobre uma sequência. Noções de Árvores Introdução a Árvores Binárias de pesquisa; Pesquisa e operações de atualização em Árvores binárias. Introdução aos Grafos Introdução às estruturas de dados para Grafos. Cadeia de caracteres - Strings Operações sobre cadeia de caracteres;
Mas afinal, o que veremos na disciplina? Introdução ao conceito de tipos abstratos de dados (TAD): Fila; Lista; Pilha; Árvore; Grafos (talvez); Introdução aos algoritmos clássicos de classificação e pesquisa; Análise de algoritmos (complexidade); Algoritmos de ordenação.
Avaliação 3 Provas 1 Trabalho APS (Trabalho) Nota final = (2. 5P 1+2.5 P 2 +2.5 P 3 +1.5 T 1 +APS) 10
O que é um algoritmo? Informalmente, um algoritmo é um procedimento computacional bem definido que: recebe um conjunto de valores como entrada. produz um conjunto de valores como saída.
Equivalentemente, um algoritmo é uma ferramenta para resolver um problema computacional. Este problema define a relação precisa que deve existir entre a entrada e a saída do algoritmo.
Exemplos de problemas Problema: Determinar se um número é primo. Entrada: 9411461 Saída: É um número primo. Entrada: 8411461 Saída: Não é um número primo.
Exemplos de problemas Problema: rearranjar um vetor A[0... n 1] de modo que fique ordenado crescentemente. Definição: A[0... n 1] é crescente se A[0] A[n 1]. Entrada: A = Saída: A = 0 n-1 55 33 33 44 33 0 n-1 33 33 33 44 55
Exemplos de problemas Problema: Encontrar uma árvore geradora mínima de um grafo G = (V, E) com custos nas arestas. Entrada: Saída:
Uma instância de um problema é um conjunto de valores que serve de entrada para esse.
Onde se encontra aplicações para o uso e desenvolvimento de algoritmos? Projeto genoma; Web; Comércio eletrônico; Planejamento da produção de indústrias; Logística de distribuição; Games e filmes. Motivação: é preciso ter uma base MUITO BOA em algoritmos para ser um bom profissional em Computação!
Infelizmente, existem certos problemas para os quais não se conhece algoritmos eficientes capazes de resolvê-los. Eles são chamados problemas N P-completos. Curiosamente, não foi provado que tais algoritmos não existem! Interprete isso como um desafio para inteligência humana.
Problemas N P-completos tem a característica notável de que se um deles admitir um algoritmo eficiente então todos daquela classe admitem algoritmos eficientes. Por que devo me preocupar com problemas N P-sei-lá-o-quê? Problemas dessa classe surgem em inúmeras situações práticas!
Exemplos de problemas N P-completos: Vehicle routing problem: calcular rotas de veículos de entrega de uma distribuidora, minimizando a distância percorrida; Bin packing 3D problem: calcular o número mínimo de containers para transportar um conjunto de caixas com produtos; Facility location problem: calcular a localização e o número mínimo de antenas de celulares para garantir a cobertura de uma certa região geográfica.
Além disso, problemas práticos semanticamente diferentes correspondem ao mesmo problema computacional (traveling salesman problem): encontre a rota de menor distância a ser percorrida para uma equipe de técnicos que irá inspecionar um conjunto de semáforos de uma cidade; calcule o comprimento mínimo de ligações metálicas necessárias em um circuito integrado para conectar um conjunto de pontos que devem ter a mesma tensão elétrica.
Motivação: é importante saber indentificar quando estamos lidando com um problema N P-completo.
O que é importante analisar em um algoritmo? Finitude: o algoritmo pára? Corretude: o algoritmo faz o que promete? Complexidade de tempo: quantas intruções são necessárias no pior caso para resolver o problema?
Questões: Introdução Qual a diferença entre um algoritmo e um programa? Qual a relação entre um algoritmo e um tipo abstrato de dados (TAD)?
Qual a diferença entre um algoritmo e um programa? Um programa é uma formulação concreta de um algoritmo abstrato, baseado em representações de dados específicas; Os programas são feitos em alguma linguagem que pode ser entendida e seguida pelo computador: Linguagem de máquina; Linguagem de alto nível (uso de compilador).
Qual a relação entre um algoritmo e um tipo abstrato de dados (TAD)? Estruturas de Dados e Algoritmos estão intimamente ligados; Em geral, algoritmos trabalham sobre estruturas de dados;
Laboratório 1) Escreva um programa que leia n registros (número esse definido em tempo de execução pelo usuário) com os seguintes dados: Primeiro nome RG Salário armazene esses dados em vetor struct (dinâmico). 2) Crie uma função para imprimir esses dados. 3) Crie uma função para modificar o salário de uma determinada pessoa e imprima novamente para verificar a atualização.